fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 18937 (C++) 왕들의 외나무다리 돌게임
최초 업로드: 2025-09-17 07:31:05
최근 수정 시간: 2025-09-17 07:31:05
게시자: rlatjwls3333
카테고리: 백준
조회수: 17
# [Platinum III] 왕들의 외나무다리 돌게임 [문제 링크](https://www.acmicpc.net/problem/18937) ## 문제 설명 <p>흰 왕(Whiteking)과 검은 왕(Blackking)이 외나무다리 돌게임을 하려고 한다.</p> <p>이 게임에서는 <em>N</em>개의 외나무다리를 사용한다. <em>i</em>번째 외나무다리는 일렬로 나열된 <em>A<sub>i</sub></em>개의 칸으로 이루어져 있다. 모든 외나무다리의 첫 번째 칸에는 흰 돌을 올려놓고, 마지막 칸에는 검은 돌을 올려놓고 게임을 시작한다.</p> <p>각 턴에 왕은 자신의 색깔의 돌 중 하나를 이동시켜야만 한다. 이동시킬 때는 같은 다리의 다른 칸으로 돌을 움직여야 하며, 상대방의 돌을 뛰어넘거나, 같은 칸으로 이동할 수 없다. 이 조건을 어기지 않는 한, 자신의 돌을 두 돌이 멀어지는 방향으로 움직여도 된다. 번갈아 가면서 턴을 진행하며, 자신의 차례에 아무 돌도 움직일 수 없는 왕이 패배한다. 둘 다 최적의 방법으로 게임을 할 때, 누가 이길지 예측해보자!</p> ## 입력 <p>첫째 줄에는 외나무다리의 개수 <em>N</em>이 주어진다. </p> <p>둘째 줄에는 각 외나무다리의 칸 수 <em>A<sub>1</sub></em>, <em>A<sub>2</sub></em>, <em>A</em><sub><em>3</em></sub>,<sub> </sub>..., <em>A<sub>N</sub></em>이 주어진다.</p> <p>셋째 줄에는 먼저 시작하는 왕의 이름이 주어진다. </p> ## 출력 <p>첫째 줄에 이길 왕의 이름을 출력한다. 이름은 항상 첫글자가 대문자임에 유의하여라.</p> ## 풀이 두 사람이 딱 붙어있는 경우에 승부가 결정되기 때문에 돌이 0개인 님 게임이라고 생각하면, 각각 a-2개의 돌을 가지고 있는 님 게임이라 볼 수 있습니다. ``` c++ #include<bits/stdc++.h> using namespace std; map<string, string> oppo = { {"Whiteking", "Blackking"}, {"Blackking", "Whiteking"}, }; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; int ret=0; while(n--) { int a; cin >> a; ret ^= a-2; } string s; cin >> s; cout << (ret ? s : oppo[s]); } ```