#include<stdio.h>
int count = 0;
int find_max(int arr[], int n)
{
int a, b;
count++;
if (n == 1)
return *arr;
else if (n % 2 == 1){
a = find_max(arr, (n + 1) / 2);
b = find_max(arr + (n + 1) / 2, (n - 1) / 2);
}
else if (n % 2 == 0){
a = find_max(arr, n / 2);
b = find_max(arr + n / 2, n / 2);
}
return (a >= b) ? a : b;
}
int main(void){
int n, i;
int *num;
int max = 0, maxindex = 0;
int max2 = 0;
scanf("%d", &n);
num = (int*)malloc(sizeof(int)*n);
for (i = 0; i < n; i++){
scanf("%d", &num[i]);
}
findmax(num, n);
for (i = 0; i < n; i++){
while (findmax(num,n)>max){
max = findmax(num, n);
maxindex = i;
}
}
for (i = 0; i < n; i++){
while (findmax(num, n) > max2&& i != maxindex)
max2 = findmax(num, n);
}
printf("%d %d", max2, count);
return 0;
}
find_max 함수를 통해 부분수열의 최댓값 중 큰 값을 반환하여
2등을 찾는겁니다.
순환 호출은 배열 길이를 반으로 쪼개서 하나로 될때까지 ... 쪼개는건데
몇번 분할하는지 count 되어야 함.
순환으로 찾는 과제라 다른방법은 없고 위와 같은 방법으로 끝내야되는데...
find_max를 선언하고 findmax를 사용하시네
아 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 그건 해결했는데.... 저거 돌려도 계속 제일 큰 값만 나온다 이기
문제는 호출횟수가 for문 을 돌려버리니 저게 다~~ 계산되서 나옴..걍 노답이다 ㅎㅎㅎㅎㅎㅎㅎㅎ