Algorithm/Baekjoon

[Algorithm/Baekjoon] 수 고르기 - 2230 (G5/JAVA)

dpdms2148 2025. 5. 19. 20:55
728x90

📑문제링크

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

💻코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(arr);// 탐색을 위해 정렬

        int leftIndex = 0;
        int rightIndex = 0;
        int answer = 2000000001;
        
        while (rightIndex < N) {
            int currentDiv = arr[rightIndex]-arr[leftIndex];
            
            if(currentDiv < M){// M보다 작은 경우, 정답이 될 수 없음, 오른쪽 인덱스 옮기기
                rightIndex++;
                continue;
            }
            if(currentDiv == M){// M과 같은 경우, 더 이상 작은 정답 찾을 수 없음, 탐색 종료
                answer = M;
                break;
            }
            //그 외, 더 작은 수가 정답이 됨, 왼쪽 인덱스 옮기기
            answer = Math.min(answer, currentDiv);
            leftIndex++;
        }

        System.out.println(answer);
        
    }
}
728x90