[백준/9024] 두 수의 합 - JAVA

이지환·2025년 6월 4일

알고리즘(백준) 💻

목록 보기
70/80
post-thumbnail

📌 문제

알고리즘 분류 : 투 포인터
난이도 : 골드5
출처 : 백준 - 두 수의 합

🦧 문제 풀이 접근

투포인터 방식으로 문제를 해결한다.
두 수의 합과 K와의 차이가 최소가 되는 숫자 쌍의 갯수를 구하는 문제이다.
입력받은 배열을 정렬하고 마지막 숫자와 끝 숫자를 비교한다.
이때 최소 차이 숫자를 저장하고 최소 차이숫자와 비교하면서 투포인터를 진행한다.

💻 code

import java.util.*;
import java.io.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        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 p1 = 0, p2 = n-1;
            int cnt=0, minGap=Integer.MAX_VALUE;
            while(p1<p2) {
                if(Math.abs(arr[p1]+arr[p2]-K)==minGap) {
                    cnt++;
                }
                else if(Math.abs(arr[p1]+arr[p2]-K)<minGap) {
                    minGap = Math.abs(arr[p1]+arr[p2]-K);
                    cnt=1;
                }

                if(arr[p1]+arr[p2]<K)
                    p1++;
                else if(arr[p1]+arr[p2]>K)
                    p2--;
                else {
                    p1++;
                    p2--;
                }
            }
            sb.append(cnt).append("\n");
        }
        System.out.println(sb);

    }
}

🥇 결과

🎓 느낀점

문제를 잘 안읽고 풀어서 그냥 두수의 합이 K인 숫자쌍으로 구현을 했었다. 문제를 잘 읽자

profile
takeitEasy

0개의 댓글