본문 바로가기

Baekjoon/C++

[C++][BOJ/백준] 16435 스네이크버드

 

 

Baekjoon Online Judge

 

16435번: 스네이크버드

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

www.acmicpc.net

 

 

[문제]

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

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

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

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

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

 

 

[입력]

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

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

 

 

[출력]

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

 

 


 

[풀이]

이 문제 풀이의 핵심은 배열을 정렬하는 것이다.

과일의 높이가 오름차순으로 입력되지 않았을 경우를 고려하여

sort() 함수를 이용해 배열을 오름차순으로 정렬한다.

 

배열이 정렬된 상태에서 for문으로 스네이크버드의 길이 L이

배열의 i번째 값보다 크거나 같다면 L을 1 증가시킨다.

for문이 끝나면 마지막으로 L을 출력하면 된다.

 

 

[코드]

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
	int N, L;

	cin >> N >> L;

	int* a = new int[N];

	for (int i = 0; i < N; i++)
		cin >> a[i];

	sort(a, a + N);

	for (int i = 0; i < N; i++)
	{
		if (a[i] <= L)
			L++;
	}

	cout << L << endl;

	return 0;
}