Rotate Array - LeetCode
Can you solve this real interview question? Rotate Array - Given an integer array nums, rotate the array to the right by k steps, where k is non-negative. Example 1: Input: nums = [1,2,3,4,5,6,7], k = 3 Output: [5,6,7,1,2,3,4] Explanation: rotate 1 step
leetcode.com
문제
int형 배열 nums 안의 요소들을 k 만큼 오른쪽으로 회전 시키는 문제입니다. 예를들어 [ 1, 2, 3, 4 ] 배열을 두번 회전 하면 1,2가 순서대로 배열 뒤쪽으로 배치되어 [ 3, 4, 1, 2 ]가 되는 방식입니다.
풀이
가장 쉽게 생각해 볼수 있는건 뒤로 옮겨질 요소 수 만큼 그대로 잘라서 배열뒤쪽에 옮기는 방식입니다. 하지만 이 방법은 회전 수가 배열의 크기를 넘어가지 않을때만 가능하다는 단점이 있습니다. 예를 들어 [ 1, 2, 3, 4 ] 배열을 두번 회전시켰을 때는 배열의 크기가 회전수 보다 크기 때문에 [ 3, 4, 1, 2 ]가 되겠지만 [ 1, 2 ]를 5번 회전 시켰을 경우에는 outoffindex 에러를 마주치게 됩니다.
이 방법은 딱 한번만 실행하면 되기 때문에 속도도 빠른 편입니다. 따라서 배열의 크기보다 회전 수가 큰 경우만 고려하여 작성해 보겠습니다.
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
nums[:] = nums[len(nums)-k:]+nums[:len(nums)-k]
if문을 사용해서 회전 수가 배열의 크기보다 큰 경우만 걸러주겠습니다. 이때 회전수와 배열의 크기를 나누었을때 생기는 나머지가 회전 시 뒤로 옮겨지게된 요소 수와 똑같습니다. [ 1, 2 ]를 5번 회전시킬 경우 5를 2로 나누었을 때 생기는 나머지인 1만큼만 회전이 되는 방식입니다.
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
if k > len(nums):
k = k % len(nums)
nums[:] = nums[len(nums)-k:]+nums[:len(nums)-k]
'자료구조,알고리즘' 카테고리의 다른 글
LeetCode-151 Reverse Words in a String 파이썬 풀 (0) | 2023.08.25 |
---|---|
LeetCode-121 Best Time to Buy and Sell Stock 파이썬 문제 풀이 (0) | 2023.08.24 |
LeetCode-169 Majority Element 파이썬 풀이 (0) | 2023.08.24 |
LeetCode-80 Remove Duplicates from Sorted Array II 파이썬 풀이 (0) | 2023.08.24 |
LeetCode-27 Remove Element 파이썬 문제풀이 (0) | 2023.08.23 |