[백준/BOJ] 20300. 서강근육맨 [Silver 4]

jychan99·2021년 10월 10일
0
post-thumbnail
  1. 서강근육맨

문제출처 : https://www.acmicpc.net/problem/20300

알고리즘은 쉬운편인데, C언어같은경우 근손실의 범위가 10^18이라서 lonlong자료형을 맞춰줘야하는데 그게 어려웠다.. 퀵소트 함수를 longlong으로 call했는데 받는건 int로 받는다던가..

code

#include <stdio.h>
void QuickSort(long long arr[],int start,int end)
{
	if (start >= end)
		return;
	int piv = start, left = start + 1, right = end;
	long long 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[left];
			arr[left] = arr[right];
			arr[right] = temp;
		}
	}
	QuickSort(arr, start, right - 1);
	QuickSort(arr, right + 1, end);
}
long long t[10000] = { 0 };
long long min = 0, M = 0;
int main()
{
	int N;
	scanf("%d", &N);
	for (int i = 0; i < N; i++)
		scanf("%lld", &t[i]);
	QuickSort(t, 0, N-1);
	if (N % 2 == 1)
	{
		for (int i = 0; i < N / 2; i++)
		{
			M = t[i] + t[(N - 2) - i];
			if (M > min)
				min = M;
		}
	}
	else
	{
		for (int i = 0; i < N / 2; i++)
		{
			M = t[i] + t[(N - 1) - i];
			if (M > min)
				min = M;
		}
	}
	printf("%lld", min);
	return 0;
}

운동기구가 홀수인 경우와 짝수인 경우를 나누어서 생각하는데,
오름차순 정렬을 하고, 주어진값중 최댓값 + 최소값을 더해 비교해나가면 근손실정도의 최솟값을 구할 수 있다.
홀수인 경우는 min값을 맨마지막 값을 넣고, 양쪽 값을 서로 더하면서 최댓값을 구한다.
짝수인 경우는 그냥 양쪽값을 서로 더하면서 최댓값을 구하면된다.

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

0개의 댓글