[백준 26215] 눈 치우기 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
모든 집의 눈을 치우는 데 필요한 최소 시간을 구하는 문제입니다.
접근법
1분에 한 집을 1만큼 치우거나 두 집을 각각 1씩 치울 수 있습니다.
따라서 분당 최대 2만큼 눈을 치울 수 있으므로, 최소 시간은 총합의 절반 이상이어야 합니다.
또한 가장 많이 쌓인 집의 눈보다 적은 시간으로는 끝낼 수 없습니다.
이후, 두 값 중 큰 값이 답이 되며, 1440분을 넘으면 -1을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
class Program {
static void Main() {
var n = int.Parse(Console.ReadLine()!);
var arr = Array.ConvertAll(Console.ReadLine()!.Split(), int.Parse);
var sum = 0;
var mx = 0;
for (var i = 0; i < n; i++) {
sum += arr[i];
if (arr[i] > mx) mx = arr[i];
}
var need = Math.Max(mx, (sum + 1) / 2);
Console.WriteLine(need > 1440 ? -1 : need);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
if (!(cin >> n)) return 0;
int sum = 0, mx = 0;
for (int i = 0; i < n; i++) {
int x; cin >> x;
sum += x;
mx = max(mx, x);
}
int need = max(mx, (sum + 1) / 2);
if (need > 1440) need = -1;
cout << need << "\n";
return 0;
}