알고리즘

백준 1337번 올바른 배열 (JAVA)

박카스마시며코딩 2022. 8. 21. 17:27

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

 

1337번: 올바른 배열

첫째 줄에 배열의 크기 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 배열의 원소가 한 줄에 하나씩 주어진다. 원소는 1,000,000,000보다 작거나 같은 음이 아닌 정수이

www.acmicpc.net

 

저는 투포인트를 이용해 문제를 해결하였습니다.

입력 배열을 오름차순 정렬하였습니다.

시작 포인트와 끝 포인트의 값의 차가 5미만이라면 끝포인트를 늘리면서 결과값을 작은 값으로 초기화시켰습니다.

반대로 5이상이라면 시작 포인트를 늘려주었습니다.

 

package BOJ.twopoint;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.function.Function;

public class BOJ_1337 {
    private static final int SIZE = 5;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        int n = stoi.apply(br.readLine());
        int[] input = new int[n];
        for(int i = 0 ; i < n ; i++){
            input[i] = stoi.apply(br.readLine());
        }
        Arrays.sort(input);
        int result = cal(input,n);
        System.out.println(result);
    }

    private static int cal(int[] input, int n) {
        int si = 0;
        int ei = 0;
        int result = 4;
        while(true){
            if(ei >= n){
                break;
            }
            if(input[ei] - input[si] < SIZE){
                ei++;
                result = Math.min(result, SIZE - (ei - si));
            }else{
                si++;
            }
        }
        return result;
    }

}