1337 올바른 배열 ⬛

kkmdevel·2024년 10월 7일

코딩테스트

목록 보기
17/21

📋문제 정리

  • 배열을 입력받아 5연속된 숫자를 만들기 위한 최소 갯수를 출력하라

🎯풀이

  • 배열을 입력받은 후 오름차순으로 정렬한다.
  • 최대 4개가 필요하기 때문에 start,end는 0 cnt 4로 초기화시킨다.
  • end의 값과 start의 값이 5보다 작으면 end를 증가시킨다.
  • 증가시킨후 end-start로 start와 end사이의 숫자의 갯수를 구한다.
  • 5-(end - start)와 cnt중 최솟값을 cnt에 저장한다.
  • 5보다크면 start를 증가시킨다. end가 n이상이면 끝낸다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.ArrayList;
import java.util.Arrays; 

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringTokenizer st;
    static StringBuilder sb = new StringBuilder();

    public static void main(String[] args) throws IOException {
        st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int arr[] = new int[n];

        for(int i=0;i<n;i++){ 
            st = new StringTokenizer(br.readLine());
            arr[i] = Integer.parseInt(st.nextToken());
        }

        Arrays.sort(arr); // 오름차순 정렬
        int start = 0;
        int end = 0;
        int cnt = 4; //최대 4

        while(true){
            if(end >= n) break;
            if(arr[end] - arr[start]<5){
                end++; // end - start + 1가 원래 갯수인데
                	   //end++;를 함으로 end에 원래 1을 더해야하는것과 같이 잡아버림
                cnt = Math.min(cnt,5-(end - start));
            }
            else{
                start++;
            }
            
        }
        
        sb.append(cnt);

        System.out.println(sb);
        br.close();
    }
}
profile
25/08/12

0개의 댓글