CS/알고리즘
[알고리즘] 0.3 배열 회전
겨울엔군고구마한잔
2022. 4. 16. 15:33
배열 arr[]과 위치 s(Start Point), t(Turning Point)가 있을 때,
오른쪽으로 한 칸씩 이동하고, arr[t]는 arr[s]로 복사하는 것을 1만큼 오른쪽으로 회전시켰다고 가정한다.
0. 배열 회전
[ 코드 ]
#include <iostream>
using namespace std;
void right_rotate(int arr[], int s, int t){
int i, last;
last = arr[t]; // 끝지점의 배열을 호출한다.
// s : Start 지점
// t : End 지점
for ( i = t; i > s; i--){
arr[i] = arr[i-1];
// 한칸씩 오른쪽을 밀려가며 변수를 호출 받는다.
// End 지점을 호출 받았으므로, End 지점이 비었다.
// End 지점에 End-1의 변수메모리를 넣는다.
// End-1 지점에 End-2의 변수메모리를 넣는다.
// 오른쪽에서부터, 오른쪽으로 한칸씩 밀어가며 변수를 호출한다.
}
arr[s] = last;
// 반복문이 끝난 시점에서 Start지점은 Start+1의 주소로 이동하였으므로 비었다.
// 즉, Start 지점에 다시 End 지점의 메모리를 할당하여서 최종적으로 배열 회전을 종료한다.
}
int main(void){
int arr[] = {1,4,5,6,7,7,9};
cout << "변경 전 배열" << endl;
int len = sizeof(arr) / sizeof(arr[0]);
for (int i =0 ; i< len ; i++){
cout << arr[i];
}
cout << ""<< endl;
right_rotate(arr, 3,len-1);
cout << "변경 후 배열" << endl;
for (int i=0; i < len; i++){
cout << arr[i];
}
cout << "" << endl;
return 0;
}
[ 결과 ]
tot4766@tot4766:~/main/코딩/c++/알고리즘$ ./a.out
변경 전 배열
1456779
변경 후 배열
1459677