https://leetcode.com/problems/rotate-array/
class Solution {
fun rotate(nums: IntArray, k: Int) {
for (i in 0 until k) {
var temp = nums[nums.size-1]
for (j in nums.size-1 downTo 1) {
nums[j] = nums[j-1]
}
nums[0] = temp
}
}
}
해결 과정
처음에는 앞에서 뒤로 이동되는 아이템들과 뒤에서 앞으로 오게되는 아이템으로 구분하여 생각을 했고, 규칙을 찾고자 했다. 하지만
"Could you do it in-place with O(1) extra space?" 라는 문제 제안에 따라, 추가 공간을 사용하지 않는 방법에 대해 고민하게 되었고
swap (temp변수) 을 활용하면 될것 같다는 생각으로 다시 고민해보았다.
배운 점
1) 다양한 input 을 고려하는 습관을 가져야겠다. 가령, Array 가 입력 값이라면, Array가 비었을때 값이 1개만 있을때..
array index 조작 시, IndexOutOfBound 등의 예외가 발생하지는 않을지 꼼꼼한 검증이 필요하다.
2) 간단 하게라도 문제 풀이를 손으로 쓰면서 풀 때, 더 명확한 방법이 눈에 들어왔다.
실행 결과 (2020.02.05)
Runtime: 292 ms, faster than 38.64% of Kotlin online submissions for Rotate Array.
Memory Usage: 44.1 MB, less than 100.00% of Kotlin online submissions for Rotate Array.