189. Rotate Array

mmmYoung·2022년 3월 13일
0

리트코드

목록 보기
9/21

문제 설명

Given an array, rotate the array to the right by k steps, where k is non-negative.

주어진 배열을 k만큼 오른쪽으로 이동시켜 출력하라. 배열은 순환되고, k는 음이 아닌 정수 이다.

  • 적어도 세 가지 접근법이 존재한다. 다양하게 생각해보기!
  • 공간 복잡도 O(1)의 방법을 찾아보아라!

출력 예시

접근 방법

첫번째 시도

단순히 nums.size() - k 번 인덱스부터 끝까지,
다시 0번 인덱스부터 nums.size() - k - 1 번 인덱스까지 삽입하기 ?
But k값이 배열 사이즈보다 크다면 순환이 안됨 !

두번째 시도

k가 배열 길이보다 작아질 때까지 배열 길이만큼을 빼준다.

소스코드

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int len = nums.size();
        vector <int> answer(len);
        while(len<k) k -=len;
        if(len==k) return;
        else{
            int idx=k;      
            for(int i = 0; i<len; i++){
                answer[idx]=nums[i];
                if(idx == len-1) idx=-1;
                idx++;
            }

            nums=answer;
        }
        
    }
};

돌아보기

공간 복잡도를 줄이는 방법이 더 어려운 것 같다...
접근법 세가지를 떠올리는 것도 실패ㅠㅠ

profile
안냐세여

0개의 댓글