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

jychan99·2021년 11월 12일
0
post-thumbnail
  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개가 나오는데 어차피 거리는 똑같기때문에 아무거나 찍어주면된다.

profile
내가 지금 두려워 하고 있는 일이 바로 내가 지금 해야 할 일이다. 🐥

0개의 댓글