250315 세 용액

Jongleee·2025년 3월 15일

TIL

목록 보기
838/970
public static void main(String[] args) throws IOException {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	int n = Integer.parseInt(br.readLine());
	int[] arr = new int[n];

	StringTokenizer st = new StringTokenizer(br.readLine());
	for (int i = 0; i < n; i++) {
		arr[i] = Integer.parseInt(st.nextToken());
	}

	Arrays.sort(arr);
	int[] result = findClosestThreeSum(arr, n);

	System.out.println(result[0] + " " + result[1] + " " + result[2]);
}

private static int[] findClosestThreeSum(int[] arr, int n) {
	long minDiff = Long.MAX_VALUE;
	int[] bestTriplet = new int[3];

	for (int i = 0; i < n - 2; i++) {
		int left = i + 1, right = n - 1;

		while (left < right) {
			long sum = (long) arr[i] + arr[left] + arr[right];

			if (Math.abs(sum) < minDiff) {
				minDiff = Math.abs(sum);
				bestTriplet[0] = arr[i];
				bestTriplet[1] = arr[left];
				bestTriplet[2] = arr[right];
			}

			if (sum == 0) {
				return bestTriplet;
			} else if (sum > 0) {
				right--;
			} else {
				left++;
			}
		}
	}
	return bestTriplet;
}

출처:https://www.acmicpc.net/problem/2473

0개의 댓글