문제 링크: https://www.acmicpc.net/problem/14720

 

딸기 - 초코 - 바나나 - 딸기 - 초코 - 바나나 - ... 이 순으로 우유를 먹었을 때 최대한 많이 먹을 수 있는 개수를 세는 문제입니다.

곰곰이 생각해봤는데 앞에서부터 입력을 받을 때 '먹을 수 있으면 먹는다'고 가정하면 최대값이 나올 것 같았습니다. 좀 생각해봤는데 먹을 수 있는데 안먹는 경우에 우유를 더 많이 먹게 되는 경우가 떠오르지 않더라고요.

이렇게 그리디로 풀면 되겠습니다

#include <bits/stdc++.h>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr), cout.tie(nullptr);

	int n;
	cin >> n;
	int current = 2;
	int cnt = 0;
	for (int i = 0; i < n; ++i) {
		int in; cin >> in;
		if (current == 0 && in == 1) {
			++cnt;
			current = 1;
		}
		else if (current == 1 && in == 2) {
			++cnt;
			current = 2;
		}
		else if (current == 2 && in == 0) {
			++cnt;
			current = 0;
		}
	}
	
	cout << cnt << '\n';

	return 0;
}
반응형

'Online Judge > 백준' 카테고리의 다른 글

[백준][C++] 9296: Grading Exams  (0) 2020.08.26
[백준][C++] 6965: Censor  (0) 2020.08.25
[백준][C++] 5014: 스타트링크  (0) 2020.08.23
[백준][C++] 11505: 구간 곱 구하기  (0) 2020.08.19
[백준][C++] 12837: 가계부 (Hard)  (0) 2020.08.18