배열 nums가 주어질 때, nums의 원소들을 k 만큼 오른쪽으로 미는 코드를 작성해라.
Space complexity O(1)로 풀어보라는 추가 조건이 있으면 어려워진다.
예시
Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4] // 반환타입 없음
조건
- 1 <= nums.length <= 105
- -231 <= nums[i] <= 231 - 1
- 0 <= k <= 105
초안
k % nums.size 만큼의 공간에 기존 정보를 저장하고 하나씩 바꾸는 방식을 고안해봤는데,
이 값의 최대값이 10^5 - 1이어서 좋은 솔루션은 아니다.
다른 사람 코드
전체 배열을 뒤집은 후, k번째 원소를 기준으로 다시 부분을 뒤집으면 된다.
fun rotate(nums: IntArray, k: Int) {
val rotate = k % nums.size
reverse(nums, 0, nums.size - 1)
reverse(nums, 0, rotate - 1)
reverse(nums, rotate, nums.size - 1)
}
fun reverse(nums: IntArray, _start: Int, _end: Int) {
var start = _start
var end = _end
while (start < end) {
val temp = nums[start]
nums[start] = nums[end]
nums[end] = temp
start++
end--
}
}
'CS 지식 > 코딩테스트' 카테고리의 다른 글
99클럽 코테 스터디 9일차 TIL | 다단계 칫솔 판매 반례 (Python) (4) | 2024.11.06 |
---|---|
[백준 14712] 넴모넴모 (Easy) Python 솔루션 (0) | 2024.10.15 |
Python은 진짜 느릴까? : Python, C++, JS 실행시간 비교 (0) | 2024.09.10 |
[LeetCode] 50. Pow(x, n) in O(log n) time (0) | 2023.01.07 |
탐색을 위한 Position Class (0) | 2023.01.06 |