[백준] 9024번 두 수의 합 JAVA 풀이

권용환·2021년 12월 11일
0

백준

목록 보기
34/36
post-thumbnail

문제 바로가기

나의 풀이

투포인터를 이용해서 풀었고 거리 비교는 절댓값으로 계산해야하므로 Math.abs()를 사용했다.

처음에는 서로 다른 정수로 구성된 배열이 주어진다는 조건을 보지 못해서 조건 분기가 굉장히 복잡했다.

이 조건으로 인해

if (sum == k) {
	left++;
	right--;
}

라는 구문이 가능해졌고 조건 분기가 상당히 깔끔해졌다.

조건을 꼼꼼하게 읽는 습관을 들이자.


나의 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());
		while (t-- > 0) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			int n = Integer.parseInt(st.nextToken());
			int k = Integer.parseInt(st.nextToken());

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

			Arrays.sort(arr);
			int left = 0;
			int right = arr.length - 1;
			int best = (int)(2 * 10e8);
			int count = 1;

			while (true) {
				int sum = arr[left] + arr[right];

				if (Math.abs(sum - k) == best) {
					count++;
				} else if (Math.abs(sum - k) < best) {
					count = 1;
					best = Math.abs(sum - k);
				}

				if (sum == k) {
					left++;
					right--;
				} else if (sum < k) {
					left++;
				} else {
					right--;
				}

				if (left >= right) {
					break;
				}
			}

			System.out.println(count);
		}
	}
}
profile
마구 낙서하는 블로그입니다

0개의 댓글