문제출처 : 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값을 맨마지막 값을 넣고, 양쪽 값을 서로 더하면서 최댓값을 구한다.
짝수인 경우는 그냥 양쪽값을 서로 더하면서 최댓값을 구하면된다.