저번 글에서 언어는 도구일 뿐이라고 했는데 언어가 도구인 것은 맞다. 하지만 전기톱으로 나무를 베는 것은 쉽지만 커터 칼로 자르면 어려운 것처럼... 파이썬으로 문제를 풀다가 C++로 문제를 푸는게 어려운 건 당연한게 아닐까...? C++이 성능이 더 좋다해도.. vi도 커맨드를 알면 정말 누구보다 편하게 쓸 수 있지만.. 기능을 익히는데 시간이 오래 걸리니까 말이다..(=실력 부족)
문제: https://leetcode.com/problems/rotate-array/
검색해보니 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을 해줬다.
'Algorithm > CPP' 카테고리의 다른 글
[C++/LeetCode/Top Interview Questions]String (0) | 2021.06.16 |
---|---|
[C++/LeetCode/Top Interview Questions]Array (0) | 2021.06.15 |
[C++, LeetCode] Contains Duplicate 벡터에 중복 값 포함되었는지 확인하기 (0) | 2021.06.15 |
[C++/LeetCode]주식을 사고 팔기 가장 좋은 시기 II (0) | 2021.06.15 |
[C++/LeetCode] 정렬된 배열(벡터)에서 중복 제거하기 (0) | 2021.06.15 |