codility Lesson2 - CyclicRotation

요리하는코더·2021년 11월 12일
0

알고리즘 - 문제

목록 보기
34/48
post-thumbnail

코드

// 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

풀이 및 소감

먼저 회전해야 하는 Kvector 사이즈보다 크면 계속 반복되므로 %를 사용해줬다. 그리고 뒤에 부분을 새로운 vector에 추가하고 앞 부분을 추가해줬다. 문제의 조건에 정확성만 신경쓰면 된다고 해서 새로운 vector를 만들어서 해결했다. 처음에 []인 경우를 신경 안 썼다가 한번 틀렸었다 ㅠㅠ
다른 사람의 풀이가 궁금해서 보다가 empty()rotate()를 잘 사용한 풀이가 있어서 가져왔다. rotate()에서 rbegin(), rend()는 역방향 연산자이다. rotate는 C++ Rotate 함수 사용법을 참고하면 좋을 거 같다.

profile
요리 좋아하는 코린이

0개의 댓글