// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
vector<int> solution(vector<int> &A, int K) {
// write your code in C++14 (g++ 6.2.0)
int len = A.size();
if(len == 0) return A;
K %= len;
vector<int> answer;
for(int i=len - K ;i<len;i++) {
answer.push_back(A[i]);
}
for(int i=0;i<len - K;i++) {
answer.push_back(A[i]);
}
return answer;
}
#include<algorithm>
vector<int> solution(vector<int> &A, int K)
{
if (A.empty() || A.size() == 1)
{
return A;
}
K = K % A.size();
if (K == 0)
{
return A;
}
std::rotate(A.rbegin(), A.rbegin() + K, A.rend());
return A;
}
// 출처: https://stackoverflow.com/questions/45577106/cyclic-rotation-codility-c-solution
먼저 회전해야 하는 K
가 vector
사이즈보다 크면 계속 반복되므로 %
를 사용해줬다. 그리고 뒤에 부분을 새로운 vector
에 추가하고 앞 부분을 추가해줬다. 문제의 조건에 정확성만 신경쓰면 된다고 해서 새로운 vector
를 만들어서 해결했다. 처음에 []
인 경우를 신경 안 썼다가 한번 틀렸었다 ㅠㅠ
다른 사람의 풀이가 궁금해서 보다가 empty()
와 rotate()
를 잘 사용한 풀이가 있어서 가져왔다. rotate()
에서 rbegin()
, rend()
는 역방향 연산자이다. rotate는 C++ Rotate 함수 사용법을 참고하면 좋을 거 같다.