[백준 | Java] 2230 수 고르기

알린·2024년 7월 13일

baekjoon

목록 보기
64/68

내 풀이

해당 문제는 배열에서 특정 조건을 만족하는 부분 배열을 찾아내야하므로 투포인터를 사용하였다.
이분탐색은 배열 내의 특정한 값을 찾는 방법이기 때문에 이분탐색보다 투포인터가 적합하다고 생각했다.

풀이과정은 다음과 같다.

  1. 두 수의 차를 기준으로 포인터를 움직여야하므로 a배열을 정렬
  2. 투포인터 탐색하기
    a. start와 end 포인트 모두 0으로 시작
    b. end가 n미만일 때 까지 아래 과정 반복
    c. start위치의 원소와 end위치의 원소의 차가 m이상일 때
    • min 연산을 통해 차의 최솟값 저장
    • start++
    • start가 end 포인트를 넘어가면 end++
    d. start위치의 원소와 end위치의 원소의 차가 m미만일 때
    • end++

코드

import java.io.*;
import java.util.*;

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[] a = new int[n];
        for (int i = 0; i < n; i++) {
            a[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(a);

        int s = 0;
        int e = 0;
        int min = Integer.MAX_VALUE;
        while (e < n) {
            int tmp = a[e] - a[s];
            if (tmp >= m) {
                min = Math.min(min, tmp);
                s++;
                if (s > e) {
                    e++;
                }
            } else {
                e++;
            }
        }
        System.out.println(min);
    }
}

profile
짱이 되고싶은 개발 기록

0개의 댓글