주어진 배열이 3, 4, 5, 8 이라고 해보자. 이를 1번 회전 시키면 8, 3, 4, 5가 된다. 이는 오른쪽으로 1번 쉬프트 시킨 것 과 동일함.
따라서, 1번 회전은 곧 1번 오른쪽 시프트와 같다. ( 배열 인덱스를 넘어가는건 다시 처음 인덱스로 돌아온다. 위 예를 보면..)
라는 식의 문제이다. K번 회전했을 때 배열의 상태를 return 하는 함수를 주어주고 이를 구현하는건데, 우선 간단하게 생각해보면
오른쪽 쉬프트 동작을 K번 반복하면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // this solution is BruteForce. vector<int> solution(vector<int> &A, int K){ if(K==0) return A; vector<int> tmpArr; tmpArr.resize(A.size()); for(int rShift = 0; rShift < K; rShift++){ for(unsigned int idx = 0; idx < A.size(); idx++){ if(idx == A.size()-1) tmpArr[0] = A[idx]; else tmpArr[idx + 1] = A[idx]; } A.assign(tmpArr.begin(), tmpArr.end()); } return tmpArr; } |
일단 이 방법은 bruteForce나 다름없다. 임의의 공간이 필요하며, K * 원소 갯수만큼 반복해야 하며 또한 쉬프트 동작 1번마다 공간에 대한 재할당이 일어난다.
동작은 하지만 굉장히 비효율적인 구조다.
댓글 없음:
댓글 쓰기