https://www.acmicpc.net/problem/9237
9237번: 이장님 초대
입력은 두 줄로 이루어져 있다. 첫째 줄에는 묘목의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄에는 각 나무가 다 자라는데 며칠이 걸리는지를 나타낸 ti가 주어진다. (1 ≤ ti ≤ 1,000,000)
www.acmicpc.net
풀이 :
- 묘목이 자라는데 걸리는 시간이 주어지고, 각 묘목은 심는데 하루가 걸린다.
나무가 다 자란 후 이장님을 초대해야 하니 최댓값을 구할 수 있도록 순서를 정해야 한다
- 가장 오래 걸리는 나무부터 차례로 심어야 하니 먼저 내림차순으로 정렬을 해준다
- 각 묘목이 다 자라기까지 걸리는 시간은 묘목이 원래 자라는데 걸리는 시간 + 이전 묘목들과 현재 묘목을 심는데 걸리는 시간이다
- 배열을 탐색하며 최댓값을 구하고, 나무가 다 자란 후에 초대해야 하기 때문에 최댓값에 1을 더한다
예제 1을 보자
4
2 3 4 3
4 3 3 2 //내림차순으로 정렬
4 = 4+1 -> 5일 걸린다
3 = 3+2 -> 5일 걸린다 4를 심는데 걸리는 시간 1, 3을 심는데 걸리는 시간 1, 총 2를 더한다
3 = 3+3 -> 6일 걸린다
2 = 2+4 -> 6일 걸린다
최댓값 6+1 -> 7일에 이장님을 초대할 수 있다
코드 :
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
cin.tie(NULL);
ios::sync_with_stdio(false);
int n, MAX = 0, num, arr[100005];
cin >> n;
for(int i=1; i<=n; i++){ //나중에 계산하기 편하게 1부터 시작
cin >> arr[i];
}
sort(arr+1,arr+n+1, greater<>()); //내림차순으로 정렬
for(int i=1; i<=n; i++){
num = arr[i]+i; //묘목이 자라는데 걸리는 시간+i(심는 시간)
MAX = max(MAX,num); //최댓값 갱신
}
cout << MAX+1 << '\n';
}
'PS_Baekjoon' 카테고리의 다른 글
[백준 C++] 5555번 : 반지 (0) | 2023.04.07 |
---|---|
[백준 C++] 2828번 : 사과 담기 게임 (1) | 2023.04.06 |
[백준 C++] 1244번 : 스위치 켜고 끄기 (0) | 2023.04.04 |
[백준 C++] 1120번 : 문자열 (0) | 2023.04.03 |
[백준 C++] 1051번 : 숫자 정사각형 (0) | 2023.04.02 |