티스토리 뷰

Algorithm/BOJ

[백준 17080] 결함게임

giiro 2020. 8. 27. 00:32

문제

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

 

17080번: 결함 게임

첫째 줄에 돌의 개수 N이 주어진다. (1 ≤ N ≤ 5,000,000)

www.acmicpc.net

 

문제 풀이

  • 각 플레이어는 턴마다, 만약 현재 보드 위에 있는 돌탑 중 어딘가에 올릴 수 있는 돌이 남아있다면, 반드시 그러한 돌들 중 하나를 골라 올릴 수 있는 돌탑 중 원하는 돌탑 위에 올린다.
  • 만약 어떤 돌탑에도 돌을 올릴 수 없다면, 남아있는 돌 중 아무거나 하나를 골라 보드 위에 새로운 돌탑의 바닥을 만든다.
  • 모든 돌이 소진된 뒤, 돌탑의 개수가 홀수이면 선공이 이기며, 짝수이면 후공이 이긴다.

위 조건들을 생각하며 돌의 개수를 한 개씩 늘려보면 아래의 규칙을 찾을 수 있습니다.

 

1.  k개의 돌을 둬서 후공이 이겼다면 (k + 1)개의 돌을 두면 선공이 이긴다 ( ∵ 선공이 1을 두고 후공이 남은 k개를 최선을 다해서 쌓아도 후공이 쌓은 돌탑의 개수는 짝수개이므로 전체 돌탑의 개수는 홀수)

 

2. 돌의 개수 3개를 시작으로 4개의 주기마다 후공이 승리함.

 

코드

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

int n;

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

	cin >> n;
	if (n % 4 == 3) cout << 2;
	else cout << 1;
}

 

 

'Algorithm > BOJ' 카테고리의 다른 글

[백준 19576] 약수  (0) 2020.08.31
[백준 19588] 상품권 준비  (0) 2020.08.31
[백준 19591] 독특한 계산기  (0) 2020.08.31
[백준 1662] 압축  (0) 2020.08.31
[백준 17143] 낚시왕  (0) 2020.08.16
댓글