https://www.acmicpc.net/problem/9657
문제
돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개, 3개 또는 4개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 이기게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
입력
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
출력
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
소스코드
n = int(input())
dp = [-1] * 1001
dp[1] = 1
dp[2] = 0
dp[3] = 1
dp[4] = 1
for i in range(5, n+1):
if dp[i-1] + dp[i-3] + dp[i-4] == 3:
dp[i] = 0
else:
dp[i] = 1
print("CY" if dp[n] == 0 else "SK")
소스코드 설명
1. 돌이 1개, 3개, 4개일 때 상근이가 게임에서 이기고, 돌이 2개일 때 창영이가 이긴다는 것을 dp리스트에 삽입한다.
2. 창영이가 이길 수 있는 조건이 "dp[i-1] + dp[i-3] + dp[i-4] == 3"임을 고려하여 이 때 dp[i]값을 0으로 지정하고 dp[n]이 0일 때 CV를 출력하도록 구현한다.
'알고리즘' 카테고리의 다른 글
[백준] 2491 - 수열(python) (0) | 2024.08.18 |
---|---|
[백준] 2217 - 로프(python) (0) | 2024.08.13 |
[백준] 11724 - 연결 요소의 개수(python) (1) | 2024.02.29 |
[백준] 11728 - 배열 합치기(python) (0) | 2024.01.22 |
[백준] 1755 - 숫자놀이(python) (0) | 2024.01.21 |