[백준/BOJ] 18310. 안테나 [Silver 3]

  1. 안테나

문제출처 : 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개가 나오는데 어차피 거리는 똑같기때문에 아무거나 찍어주면된다.

좋은 웹페이지 즐겨찾기