주의해야할 테스트 케이스
input:
5
9 8 7 6 6 6
ans: 18
output: 21
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
vector<int> snows;
for (int i = 0; i < n; ++i) {
int input;
cin >> input;
if (input > 1440) {
cout << -1;
return 0;
}
snows.push_back(input);
}
//집 앞의 눈 오름차순 정렬
sort(snows.begin(), snows.end());
int time = 0;
while (!snows.empty()) {
//가장 높이 쌓인 집 앞의 눈 치우기
int maxSnow = snows.back();
time += snows.back();
snows.pop_back();
if (time > 1440) {
cout << -1;
return 0;
}
//이와 동시에 치울 수 있는 다른 집 앞의 눈 치우기
while (!snows.empty()) {
int snow = snows.back();
snows.pop_back();
if (snow <= maxSnow) {
maxSnow -= snow;
if (maxSnow == 0) break;
}
else {
snows.push_back(snow - maxSnow);
sort(snows.begin(), snows.end());
break;
}
}
}
cout << time;
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int n;
cin >> n;
vector<int> snows;
for (int i = 0; i < n; ++i) {
int input;
cin >> input;
snows.push_back(input);
}
if (n == 1) {
if (snows[0] > 1440) cout << -1;
else cout << snows[0];
return 0;
}
int time = 0;
while (true) {
sort(snows.begin(), snows.end());
//모든 눈을 치운 경우
if (snows[n - 1] == 0) break;
snows[n - 1]--;
if(snows[n - 2] != 0) snows[n - 2]--;
time++;
if (time > 1440) {
cout << -1;
return 0;
}
}
cout << time;
return 0;
}