알고리즘/백준

[파이썬, 자바] BOJ_16435(스네이크버드)

딱따구르리 2021. 1. 26. 14:05
728x90
반응형

문제

 

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

 

16435번: 스네이크버드

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

www.acmicpc.net


 

해설

 

이 문제는 왜 실버5인지 모를만큼 쉬운 문제다.

스네이크버드가 더 이상 먹을 수 있는 과일이 없을때까지 과일을 먹게 만들면 된다.

 

스네이크버드는 자신보다 작거나 같은 높이에 있는 과일을 먹을 수 있는데,

과일이 주어진 순서대로 먹어야 하는 것은 아니고 그냥 먹을 수 있는 과일을 먹으면 된다.

 

그렇다면 되도록 가장 낮은 높이에 있는 과일부터 먹는 것이 좋을테니

과일을 오름차순 정렬하면 해결된다.

그 후, 자신보다 낮거나 같은 높이에 있는 과일을 만나면 스네이크버드의 길이를 +1 해주면 된다.


코드

 

-파이썬

#백준 16435(스네이크버드)
import sys
input = sys.stdin.readline

n, l = map(int, input().split())  #과일 개수, 스네이크버드 초기 길이
fruit = list(map(int, input().split()))  #과일 위치

fruit.sort()  #오름차순 정렬

for i in range(len(fruit)):
    if l < fruit[i]:  #과일이 스네이크버드보다 높이 있으면
        break
    else:  #낮게 있으면
        l += 1

print(l)

 

-자바

//백준 16435(스네이크버드)
import java.util.*;
import java.io.*;
public class Boj_16435 {

	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 snake = Integer.parseInt(st.nextToken());  //스네이크버드 초기 길이
		
		st = new StringTokenizer(br.readLine());
		
		int[] fruit = new int[n]; 
		
		//과일 입력
		for(int i = 0; i < n; i++) {
			fruit[i] = Integer.parseInt(st.nextToken());
		}
		
		Arrays.sort(fruit);
		
		for(int j = 0; j < n; j++) {
			if(snake >= fruit[j]) {
				snake ++;
			}
			else {
				break;
			}
		}
		
		System.out.println(snake);
		

	}

}
728x90
반응형