회전 정렬된 배열인 배열이 있다고 가정합니다. 배열을 정렬하는 데 필요한 회전 수를 찾아야 합니다. (오른쪽에서 왼쪽으로 회전하는 것을 고려할 것입니다.)
배열이 {15, 17, 1, 2, 6, 11}과 같다고 가정하고 정렬하려면 배열을 두 번 회전해야 합니다. 최종 주문은 {1, 2, 6, 11, 15, 17}입니다. 여기서 출력은 2입니다.
논리는 간단합니다. 알아차리면 최소 요소의 인덱스 값과 회전 횟수가 동일함을 알 수 있습니다. 따라서 최소 요소를 얻으면 해당 인덱스가 결과가 됩니다.
예시
#include <iostream> using namespace std; int getMinIndex(int arr[], int n){ int index = 0; for(int i = 1; i<n; i++){ if(arr[i] < arr[index]){ index = i; } } return index; } int countNumberOfRotations(int arr[], int n){ return getMinIndex(arr, n); } int main() { int arr[] = {15, 17, 1, 2, 6, 11}; int n = sizeof(arr)/sizeof(arr[0]); cout << "Number of required rotations: " << countNumberOfRotations(arr, n); }
출력
Number of required rotations: 2