“정렬 후 회전된 배열”이란 (5, 8, 9, 2, 3, 4)와 같은 배열을 말한다. 즉, 정렬이 된 후에 회전 연산이 0회 이상 적용된 배열이다. 회전 연산이란 배열의 마지막 원소가 처음으로 이동하고 나머지 원소들이 오른쪽으로 한 칸씩 이동하는 것을 말한다. 예를 들어, (2, 3, 4, 5, 8, 9)는 정렬된 배열이고 여기에 회전 연산을 1회 적용하면 (9, 2, 3, 4, 5, 8)이 되고 여기에 회전 연산을 추가로 2회 적용하면 (5, 8, 9, 2, 3, 4)가 된다. 따라서 (5, 8, 9, 2, 3, 4)는 정렬 후 회전된 배열이다.
(a) 길이가 n 인 정렬후 회전된 배열 A[0..n-1]가 주어질 때, 이 배열 A 에서 최댓값을 찾는 알고리즘을 설계하시오.
(b) 정렬후 회전된 배열 A[0..n-1]가 회전연산을 몇번 적용한 것인지 알아내는 알고리즘을 설계하시오.
(c) 정렬후 회전된 배열 A[0..n-1]와 k 가 주어질 때, A 안에서 k 를 탐색하는 알고리즘을 설계하시오. 즉, A 의 원소 중에 k 가 있으면 그 위치(index)를 출력하고 없으면 -1 을 출력합니다.
더보기
Solution
#include<stdio.h> #include<stdlib.h> #include<time.h> int find_max(int *arr,int size) //(a) { for(int i=1;i<size;i++) if(arr[i-1]>arr[i]) return arr[i-1]; return arr[size-1]; } int rotated_count(int *arr,int size) //(b) { for(int i=1;i<size;i++) if(arr[i-1]>arr[i]) return i; return 0; } int find_k(int *arr,int k,int size) //(c) { for(int i=0;i<size;i++) if(arr[i]==k) return i; return -1; } int main(void) { int size, *arr=NULL, k,random; srand((unsigned)time(NULL)); printf("size: "); scanf("%d", &size); arr=(int *)malloc(size*sizeof(int)); printf("initial array: "); for(int i=0;i<size;i++) { arr[i]=rand()%100; printf("%d ", arr[i]); } printf("\n"); for(int i=0;i<size-1;i++) //sort array for(int j=i+1;j<size;j++) if(arr[i]>arr[j]) { int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } printf("sorted array: "); for(int i=0;i<size;i++) printf("%d ", arr[i]); printf("\n"); random=rand()%size; //rotate array printf("random:%d\n", random); for(int i=0;i<random;i++) { int temp=arr[size-1]; for(int j=size-1;j>=0;j--) arr[j]=arr[j-1]; arr[0]=temp; } printf("rotated array: "); for(int i=0;i<size;i++) printf("%d ", arr[i]); printf("\n"); printf("max:%d,rotated count:%d\n",find_max(arr,size),rotated_count(arr,size)); printf("k: "); scanf("%d", &k); printf("%d\n",find_k(arr,k,size)); free(arr); return 0; }
728x90
'C언어 알고리즘' 카테고리의 다른 글
<C언어 알고리즘> 최대합 부분배열 (0) | 2020.04.11 |
---|---|
<C언어 알고리즘> 배열의 인덱스와 값이 일치하는 경우 찾기 (0) | 2020.04.10 |
<C언어 알고리즘> 반복문을 사용하지 않고 합계 구하기 (0) | 2020.04.09 |
<C언어 알고리즘> 반복문을 사용하지 않고 선택정렬 (0) | 2020.04.09 |
<C언어 알고리즘> 팬케이크 정렬 (0) | 2020.04.09 |