ps:problems:boj:3754
John
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 3754 |
문제명 | John |
레벨 | 플래티넘 2 |
분류 |
게임 이론 |
시간복잡도 | O(T*n) |
인풋사이즈 | T<=474, n<=47 |
사용한 언어 | Python 3.11 |
제출기록 | 34136KB / 76ms |
최고기록 | 40ms |
해결날짜 | 2023/07/22 |
풀이
- 같은 색의 초콜렛을 같은 파일에 들어있는 돌이라고 바꿔서 읽으면 그냥 님게임이 된다. 다만 마지막 돌을 가져가면 이기는 노멀 님이 아니라, 마지막 돌을 가져가면 지는 미제르님이 된다.
- 님 게임와 사실상 동일한 문제이다
- 미제르 님은 게임 이론 (Game theory)에서 설명했듯이, 모든 파일의 돌이 1일때만 파일 갯수의 홀짝여부에 따라 승패가 결정되고, 나머지 포지션에서는 노멀님과 동일한 승리조건을 갖는다. O(n)에 계산 가능하다
코드
"""Solution code for "BOJ 3754. John".
- Problem link: https://www.acmicpc.net/problem/3754
- Solution link: http://www.teferi.net/ps/problems/boj/3754
Tags: [game theory]
"""
import functools
import operator
import sys
def main():
T = int(sys.stdin.readline())
for _ in range(T):
N = int(sys.stdin.readline())
A = [int(x) for x in sys.stdin.readline().split()]
if max(A) == 1:
print('John' if N % 2 == 0 else 'Brother')
else:
grundy = functools.reduce(operator.xor, A)
print('John' if grundy != 0 else 'Brother')
if __name__ == '__main__':
main()
ps/problems/boj/3754.txt · 마지막으로 수정됨: 2023/07/22 14:09 저자 teferi
토론