본문 바로가기

Algorithm/Greedy

(C++) - 백준(BOJ) 16435 : 스네이크버드

반응형

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

greedy로 푼 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

처음 스네이크버드의 길이 snakeBirdLength, 과일 개수 n, n개의 과일 높이 정보를 저장할 vector fruitHeight를 선언 한 후 적절히 입력받습니다.

📔 풀이과정

새가 제일 길어지려면 과일을 최대한 많이 먹어야 합니다. 이를 위해 과일 높이를 오름차순으로 정렬을 해줘야 합니다. 현 자신의 높이 이하의 과일을 최대한 많이 먹어야 새 높이보다 높이 있는 과일도 먹을 수 있기 때문입니다 

정렬 후 for loop를 수행하며 자신보다 낮은 높이의 과일을 먹으며 길이를 늘립니다.

📔 정답출력

snakeBirdLength를 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
int snakeBirdLength, n;
vector <int> fruitHeight;
int main(){
    cin >> n >> snakeBirdLength;
    fruitHeight.resize(n);
    for(int i = 0; i < n; i++) cin >> fruitHeight[i];
    sort(fruitHeight.begin(), fruitHeight.end());
    for(auto f : fruitHeight){
        if(snakeBirdLength >= f) {
            snakeBirdLength++;
        }
    }
    cout << snakeBirdLength;
}