Notice
Recent Posts
Recent Comments
Link
오늘도 개발
28. Rotate Array 본문
문제
배열 nums의 요소를 k만큼 이동하라.
Input: nums = [1,2,3,4,5,6,7], k = 3
Output: [5,6,7,1,2,3,4]
내가 생각한 방식
전체 배열을 뒤집고, k를 기준으로 앞, 뒤를 다시 정렬.
문제점 : nums가 [1, 2]고 k가 3일때 두번째 while에서 list index out of range 오류 발생
def rotate(nums, k):
# 전체 배열을 뒤집음 [7, 6, 5, 4, 3, 2, 1]
i = 0
j = len(nums) - 1
if (i == j or k == 0):
return nums
while (i < j):
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
# 뒤집은 배열의 앞쪽 정렬
i = 0
j = k - 1
while (i < j):
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
# 뒤집은 배열의 뒷쪽 정렬
i = k
j = len(nums) - 1
while (i < j):
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
return nums
해결 방식
k에 모듈러 적용.
k를 기준으로 앞, 뒤를 정렬하고 전체 배열을 뒤집음.
내가 생각한 방식대로 뒤집고 앞, 뒤를 정렬하면 바르게 정렬되지 않음.
class Solution:
def reverse (self, nums, i, j) :
while i < j:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
def rotate(self, nums: List[int], k: int) -> None:
k = k % len(nums)
if k < 0 :
k += len(nums)
self.reverse(nums, 0, len(nums) - k - 1);
self.reverse(nums, len(nums) - k, len(nums) - 1);
self.reverse(nums, 0, len(nums) - 1);
'자료구조 & 알고리즘 > Leetcode' 카테고리의 다른 글
| 31. Linked List Cycle (0) | 2022.10.20 |
|---|---|
| 30. Design Linked List (0) | 2022.10.19 |
| 27. Minimum Size Subarray Sum (0) | 2022.10.15 |
| 26. Two Sum II - Input array is sorted (1) | 2022.10.15 |
| 25. Array Partition I (1) | 2022.10.14 |