문제출처 : https://www.acmicpc.net/problem/18310
code
#include <stdio.h> #include <stdlib.h> void QuickSort(int arr[], int start, int end) { if (start >= end) return; int piv = start, left = start + 1, right = end, temp; while (left <= right) { while (left <= end && arr[left] <= arr[piv]) left++; while (right > start && arr[right] >= arr[piv]) right--; if (left > right) { temp = arr[right]; arr[right] = arr[piv]; arr[piv] = temp; } else { temp = arr[right]; arr[right] = arr[left]; arr[left] = temp; } } QuickSort(arr, start, right - 1); QuickSort(arr, right + 1, end); } int main() { int N, i; int* ant; scanf("%d", &N); ant = (int*)malloc(N * sizeof(int)); for (i = 0; i < N; i++) scanf("%d", &ant[i]); QuickSort(ant, 0, N - 1); printf("%d", ant[(N-1)/2]); free(ant); return 0; }
중간값에 가장 근접한 집이 정답인것같은 느낌은 들었지만, 어떻게 풀어야할지 몰라서 평균이랑 중간값구한다음 가장 가까운값을 출력하려고했는데, 코드에서 막히더라...
어떻게 풀지 한참고민하다가 어차피 중간값을 찾을거면, 정렬해서 중간인덱스를 출력하면 되는거아닌가? 해서 입력했더니 통과됐다...(N-1)/2 인이유는 0~N-1까지 인덱스가 있기 때문이다. N이 짝수이면 중간값이 2개가 나오는데 어차피 거리는 똑같기때문에 아무거나 찍어주면된다.