Information Security ˗ˋˏ ♡ ˎˊ˗

Programming/Programming 풀이

[Baekjoon] 16435번 스네이크버드(C++)

토오쓰 2021. 1. 14. 22:03

 

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

 

 

Level: Level 1

풀이: 미참고

Language: C++

프로그램: Visual Studio 2017

 

 

 

문제설명

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

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

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

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

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

 

 

입력/출력

입력

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

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

입력 예

3 10
10 11 13

출력

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

출력 예

스네이크버드의 처음 길이는 10이며 1번 과일을 먹은 후 길이가 11이 됩니다. 이후 2번 과일을 먹으면 길이가 12가 됩니다. 더 이상 먹을 수 있는 과일이 없으므로 최대 길이는 12가 됩니다.

12

 

 

풀이

과일의 개수 n, 스네이크버드의 초기길이를 L로 설정하였다.

과일의 높이를 담는 배열은 h이다.

반복문을 돌면서 스네이크버드의 길이보다 작거나 같은 과일일 경우, 초기 길이에서 1만큼 증가시킨다.

다 탐색을 했을 때, 길이가 변하지 않는다면 반복문을 끝낸다(Break).

 

 

Code

#include <iostream>
using namespace std;

int main(){
	int h[1001];//과일의 높이를 담는 배열
	int n = 0; //과일의 개수
	int L = 0; //스네이크버드의 초기길이

	cin >> n >> L;
	int L2 = L;
	for (int i = 1; i <= n; ++i) {
		cin >> h[i];
	}
	while (true) {
		for (int i = 1; i <= n; ++i) {
			if (L >= h[i]){
				h[i] = 10000000; //확인된 값에 의미없는 값 넣기
				L++;
			}
		}
		//다 탐색했을 때, 길이가 변하지 않는다면 반복문을 끝낸다.
		if (L == L2) break;
		L2 = L;
	}
	cout << L;
}

 

ScreenShot