작성일 :

문제 링크

26215번 - 눈 치우기

설명

모든 집의 눈을 치우는 데 필요한 최소 시간을 구하는 문제입니다.


접근법

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;
}