Algorithm

[BAEKJOON] 2467번 : 용액 (JAVA)

멍목 2023. 4. 2. 19:09
반응형

- 알고리즘 분류 : 이분 탐색(이진 탐색)

- 사용 언어 : JAVA

- 문제 요점

    - 이진 탐색을 진행하면서, 절반씩 탐색이 아닌 1씩 줄여가며 탐색한다.

 

 

소스 설명은 주석을 참고해주세요.

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

public class Main {
    static int num1 = 0, num2 = 0, figure = Integer.MAX_VALUE;
    static int[] arr;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        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);           // 오름차순 정렬

        BinarySearch(0, arr.length-1);

        System.out.println(num1 + " " + num2);
    }

    static void BinarySearch(int start, int end) {
        if(start >= end) return;

        int sum = arr[start] + arr[end];
        if(Math.abs(sum) < figure) {
            num1=arr[start];
            num2=arr[end];
            figure=Math.abs(sum);
            if(sum == 0) {
                return;
            }
        }

        if(sum < 0) {
            BinarySearch(start+1, end);
        }
        else {
            BinarySearch(start, end-1);
        }
    }
}
반응형