※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 5587번 문제인 카드 캡터 상근이이다.
문제는 아래 링크를 확인하자.

https://www.acmicpc.net/problem/5587 

 

5587번: 카드 캡터 상근이

1번째 줄에 상근이의 점수를 출력하고, 2번째 줄에 근상이의 점수를 출력한다.

www.acmicpc.net

매 차례마다 많아야 200개의 카드(전체)를 두번 둘러보면 한 사람의 카드를 제거할 수 있고 카드가 제거되는 횟수 또한 많아야 200번이라는 점을 관찰하자.

 

위의 관찰을 이용하면 게임의 진행 과정을 단순히 반복문을 이용해 구현하는 것으로도 문제를 해결할 수 있다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
using namespace std;

int arr[201];
int cnt[2];

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

	int N; cin >> N;
	for (int i = 0; i < N; i++) {
		int x; cin >> x;
		arr[x] = 1;
	}

	int NN = N * 2;
	int turn = 0;
	bool chk = 1;
	cnt[0] = cnt[1] = N;

	while (chk) {
		turn ^= 1;
		for (int i = 1; i <= NN; i++) {
			if (arr[i] == turn) {
				cnt[turn]--;
				if (cnt[turn] == 0) {
					chk = 0;
					break;
				}
				arr[i] = -1;
				turn ^= 1;
			}
		}
	}

	cout << cnt[0] << '\n' << cnt[1];
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 14729 // C++] 칠무해  (0) 2022.06.19
[BOJ 5586 // C++] JOI와 IOI  (0) 2022.06.19
[BOJ 14730 // C++] 謎紛芥索紀 (Small)  (0) 2022.06.19
[BOJ 5590 // C++] 船旅  (0) 2022.06.19
[BOJ 14732 // C++] 행사장 대여 (Small)  (0) 2022.06.19

+ Recent posts