Algorithm/CPP

[C++/LeetCode]Rotate Array(벡터 값 회전하기)

박한결 2021. 6. 15. 15:25

저번 글에서 언어는 도구일 뿐이라고 했는데 언어가 도구인 것은 맞다. 하지만 전기톱으로 나무를 베는 것은 쉽지만 커터 칼로 자르면 어려운 것처럼... 파이썬으로 문제를 풀다가 C++로 문제를 푸는게 어려운 건 당연한게 아닐까...? C++이 성능이 더 좋다해도.. vi도 커맨드를 알면 정말 누구보다 편하게 쓸 수 있지만.. 기능을 익히는데 시간이 오래 걸리니까 말이다..(=실력 부족)

 


 

 

문제: https://leetcode.com/problems/rotate-array/

 

Rotate Array - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

검색해보니 rotate라는 편리한 함수가 있다고 해서 사용해봤다. 한번 돌릴 때마다 원소들을 swap해주는거라서 비효율적일거같다고는 생각했지만... 조금은 통과할거라고 기대했지만 실패했다.

 

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
        for (int i = 0; i < k; i++){
            std::rotate(nums.begin(), nums.end()-1, nums.end());
        }
        
    }
};

 

그래서 벡터를 하나 더 만드는 방법을 선택했다. 

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        
        int n = nums.size();
        vector<int> temp(n);
        for (int i=0; i<n; i++){
            temp[(i+k)%n] = nums[i];
        }
        for (int i=0; i<n; i++){
            nums[i] = temp[i];
        }
        
    }
};

(i+k)%n 이 핵심이다. k 만큼 회전을 하는데 이게 벡터의 범위를 벗어나면 안되므로(벗어나면 제일 앞으로 가니까) % n을 해줬다.