작성일 :

문제 링크

20282번 - Game Show!

설명

초기 100에서 시작해 상자를 순서대로 열며 누적할 수 있고, 언제든 중단해 현재 잔액을 상금으로 받을 때 최대 상금을 구하는 문제입니다.


접근법

상자를 열 때마다 잔액에 상자 내용물을 더하고, 지금까지의 최댓값을 갱신합니다. 잔액이 최대였던 시점에 멈추면 최대 상금을 얻을 수 있으므로, 모든 상자를 확인하며 최댓값을 추적하면 됩니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;

class Program {
  static void Main() {
    var c = int.Parse(Console.ReadLine()!);
    var cur = 100;
    var best = 100;

    for (var i = 0; i < c; i++) {
      var v = int.Parse(Console.ReadLine()!);
      cur += v;
      if (cur > best) best = cur;
    }

    Console.WriteLine(best);
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int c; cin >> c;
  int cur = 100, best = 100;

  for (int i = 0; i < c; i++) {
    int v; cin >> v;
    cur += v;
    best = max(best, cur);
  }

  cout << best << "\n";

  return 0;
}