백준 16435 스네이크버드 문제풀이 (JAVA)

문제 링크

문제


스네이크버드는 뱀과 새의 모습을 닮은 귀여운 생물체입니다.

스네이크버드의 주요 먹이는 과일이며 과일 하나를 먹으면 길이가 1만큼 늘어납니다.

과일들은 지상으로부터 일정 높이를 두고 떨어져 있으며 i (1 ≤ i ≤ N) 번째 과일의 높이는 hi입니다.

스네이크버드는 자신의 길이보다 작거나 같은 높이에 있는 과일들을 먹을 수 있습니다.

스네이크버드의 처음 길이가 L일때 과일들을 먹어 늘릴 수 있는 최대 길이를 구하세요.

입력


첫 번째 줄에 과일의 개수 N (1 ≤ N ≤ 1,000) 과 스네이크버드의 초기 길이 정수 L (1 ≤ L ≤ 10,000) 이 주어집니다.

두 번째 줄에는 정수 h1, h2, ..., hN (1 ≤ hi ≤ 10,000) 이 주어집니다.

출력


첫 번째 줄에 스네이크버드의 최대 길이를 출력합니다.

풀이


스네이크버드는 자신보다 길이가 작거나 같은 높의의 과일만 먹을 수 있다.
그래서 과일을 오름차순으로 정렬하고, 가장 왼쪽거 무터 냠냠하면 된다.

소스코드


import java.util.*;
import java.io.*;
public class Main{
    
    public static void main(String [] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st = new StringTokenizer(br.readLine());
        final int NUMBER_OF_FRUIT = Integer.parseInt(st.nextToken());
        int snakeLength = Integer.parseInt(st.nextToken());
        int fruit[] = new int [NUMBER_OF_FRUIT];
        st = new StringTokenizer(br.readLine());
        for(int i=0;i<NUMBER_OF_FRUIT;i++) {
            fruit[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(fruit);
        for(int i=0;i<NUMBER_OF_FRUIT;i++) {
            if(fruit[i] <= snakeLength) {
                snakeLength++;
            }else {
                break;
            }
        }
        sb.append(snakeLength);
        sb.append("\n"); 
        
        bw.write(sb.toString());
        
        bw.flush();
        br.close();
        bw.close();
        
    }

    
}

0개의 댓글