작성일 :

문제 링크

26026번 - Coffee Cup Combo

설명

커피머신이 있는 강의실과 없는 강의실이 순서대로 주어질 때, 깨어 있을 수 있는 강의 수의 최댓값을 구하는 문제입니다.

한 강의에서 깨어 있으려면 커피 1잔이 필요하고, 머신이 있는 강의실에서는 커피를 내려 마실 수 있습니다. 강의 후에는 다음 강의로 최대 2잔까지 들고 갈 수 있습니다.


접근법

그리디 시뮬레이션으로 해결할 수 있습니다. 핵심 아이디어는 머신이 있는 곳에서 항상 2잔을 최대로 채워 나가는 것입니다.

머신이 있는 곳에서 1잔을 마시고 2잔을 들고 나가면, 이후 머신이 없는 강의실 2개까지 추가로 커버할 수 있습니다.

현재 손에 든 커피 잔 수를 추적하면서 강의를 순회하면 됩니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;

class Program {
  static void Main() {
    var n = int.Parse(Console.ReadLine()!);
    var s = Console.ReadLine()!;

    var carry = 0;
    var awake = 0;
    for (var i = 0; i < n; i++) {
      if (s[i] == '1') {
        awake++;
        carry = 2;
      } else {
        if (carry > 0) {
          carry--;
          awake++;
        }
      }
    }

    Console.WriteLine(awake);
  }
}

C++

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

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

  int n; cin >> n;
  string s; cin >> s;

  int carry = 0, awake = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == '1') {
      awake++;
      carry = 2;
    } else {
      if (carry > 0) {
        carry--;
        awake++;
      }
    }
  }

  cout << awake << "\n";

  return 0;
}