[백준 26026] Coffee Cup Combo (C#, C++) - soo:bak
작성일 :
문제 링크
설명
커피머신이 있는 강의실과 없는 강의실이 순서대로 주어질 때, 깨어 있을 수 있는 강의 수의 최댓값을 구하는 문제입니다.
한 강의에서 깨어 있으려면 커피 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;
}