BackJoon Algorithm 수고르기 2230 .(Java)

업데이트:
1 분 소요

BackJoon Algorithm - Java

alt

문제

alt

풀이

..

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

public class Back_2230 {
    public static void main(String[] args) throws IOException {
        // 입력을 받기 위한 BufferedReader 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 첫 줄에 입력된 N(수열의 길이), M(최소 차이)을 받음
        StringTokenizer token = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(token.nextToken()); // 수열의 길이 N
        int M = Integer.parseInt(token.nextToken()); // 최소 차이 M

        // N개의 수를 담을 배열 선언
        int[] arr = new int[N];

        // 배열에 수열 값 입력 받기
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine()); // 각 숫자를 배열에 저장
        }

        // 결과값을 저장할 변수 'min'을 초기화, Integer.MAX_VALUE로 시작
        int min = Integer.MAX_VALUE; // 최소 차이를 찾기 위한 변수

        // 투 포인터 중 뒤쪽 포인터(en)를 0으로 초기화
        int en = 0;

        // 수열을 오름차순으로 정렬 (투포인터는 정렬된 배열에서 효과적)
        Arrays.sort(arr);

        // 첫 번째 포인터(st)를 0부터 시작해서 N까지 이동
        for(int st = 0; st < N; st++) {
            // 두 번째 포인터(en)가 수열의 끝을 넘지 않고, arr[en] - arr[st]가 M보다 작은 동안 en을 증가
            while(en < N && arr[en] - arr[st] < M) {
                en++; // 조건을 만족하지 않으면 en을 앞으로 이동
            }
            // en이 범위를 넘어가면 더 이상 검사할 필요 없음
            if(en == N) break;

            // 조건을 만족하는 차이를 찾으면 그 차이를 min과 비교해 최소값을 저장
            min = Math.min(min, arr[en] - arr[st]); // arr[en] - arr[st] >= M인 최소값 찾기
        }

        // 최소 차이값 출력
        System.out.println(min);
    }
}



댓글남기기