본문 바로가기
알고리즘/투포인터

[백준 2407] 두 용액 / 자바 / 투 포인터

by 순원이 2024. 6. 17.

문제         

레벨: G5
알고리즘: 투 포인터 

풀이시간: 40분
힌트 참조 유무: 무

https://www.acmicpc.net/problem/2470

1 번째 시도   

[로직 설명]

1. 입력받은 숫자를 오름차순으로 정렬한다.

2. sum 값을 비교해가면 start, end  두 포인터를 조절해간다.

3. 종료조건은 start가 end 같거나 클 때이다.

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        
        String[] s = br.readLine().split(" ");
        int[] numbers = new int[N];
        for (int i = 0; i < N; i++) {
            numbers[i] = Integer.parseInt(s[i]);
        }

        Arrays.sort(numbers);

        int start = 0, end = N - 1;
        int minGap = Integer.MAX_VALUE;
        int resultStart = numbers[start], resultEnd = numbers[end];

        while (start < end) {
            int sum = numbers[start] + numbers[end];
            int gap = Math.abs(sum);

            if (gap < minGap) {
                minGap = gap;
                resultStart = numbers[start];
                resultEnd = numbers[end];
            }

            if (sum > 0) {
                end--;
            } else if (sum < 0) {
                start++;
            } else {
                break; 
            }
        }

        System.out.println(resultStart + " " + resultEnd);
    }
}