본문 바로가기

Algorithm/Greedy

(C++) - 백준(BOJ) 9237 : 이장님 초대

반응형

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

 

9237번: 이장님 초대

입력은 두 줄로 이루어져 있다. 첫째 줄에는 묘목의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 각 나무가 다 자라는데 며칠이 걸리는지를 나타낸 ti가 주어진다. (1 ≤ ti ≤ 1,000,000)

www.acmicpc.net

greedy문제였습니다.

📕 풀이방법

📔 입력 및 초기화

묘목의 수 n, 이장님 만나는 날 meetDay, 묘목 자라는데 걸리는 시간을 저장할 vector형 변수 growDay를 선언 후 적절히 입력해줍니다.

📔 풀이과정

자라는데 오래걸리는 묘목은 최대한 빨리 심어야 합니다. 따라서 growDay를 내림차순으로 정렬해줍니다.1. growDay에 대해 for loop를 수행합니다. 매 loop를 수행할 때마다 하루가 지난것으로 생각할 수 있습니다. 2. 따라서 묘목이 다 자라려면 growDay[i] + i + 1만큼의 시간이 필요합니다(i는 0부터 시작하기 때문에). 이 값의 최댓값이 묘목이 다 자라려면 필요한 시간입니다. 

📔 정답출력

반드시 묘목이 다 자란뒤에 만날 수 있으므로 meetDay + 1을 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;

int n, meetDay;
vector<int> growDay;

int main(){
    cin >> n;
    growDay.resize(n);

    for(int i = 0; i < n; i++) cin >> growDay[i];

    sort(growDay.rbegin(), growDay.rend());

    for(int i = 0; i < growDay.size(); i++)
        meetDay = max(meetDay, growDay[i] + i + 1);

    cout << meetDay + 1;
}