※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 32466번 문제인 Jenga Game이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/32466
각 층에 대하여, 주어진 상황은 "101"과 "010"은 그런디 수가 0, (맨 윗층을 제외한)"111"은 그런디 수가 2, 나머지는 그런디 수가 1인 돌무더기인 님(Nim) 게임으로 생각할 수 있음을 관찰하자.
이를 이용하면 스프라그-그런디 정리(Sprague-Grundy Theorem)을 활용해 문제를 간단히 해결할 수 있다.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int N;
int val;
void solve() {
val = 2;
cin >> N;
while (N--) {
int cnt = 0;
char x, y, z; cin >> x >> y >> z;
if (x == '1' && y == '0' && z == '1') continue;
if (x == '1') cnt++;
if (y == '1') cnt++;
if (z == '1') cnt++;
val ^= (cnt - 1);
}
if (val) cout << "Yesyes\n";
else cout << "Nono\n";
}
int T;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while (T--) solve();
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 4304 // C++] Antiarithmetic? (3) | 2024.10.10 |
---|---|
[BOJ 30814 // C++] Watchmen (1) | 2024.10.08 |
[BOJ 12051 // C++] Dynamic Grid (Large) (0) | 2024.10.04 |
[BOJ 26091 // C++] 현대모비스 소프트웨어 아카데미 (1) | 2024.10.02 |
[BOJ 1262 // C++] 알파벳 다이아몬드 (1) | 2024.09.27 |