[ Contents ]
1. 문제 (링크 참조)
9656번: 돌 게임 2
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
2. 문제 풀이
돌은 1개 혹은 3개씩 가져갈 수 있으며, 마지막 돌을 가져가는 사람이 지게 됩니다.
두 사람이 완벽하게 게임을 진행했다고 가정하고, n이 주어졌을 때 이기는 사람을 구해야 합니다. (상근이가 먼저 시작)
2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계획법(Dynamic programming, DP): 작은 문제들에 대한 결과를 배열(리스트)에 저장하고, 이를 이용해서 입력 크기가 더 큰 문제를 점진적
star7sss.tistory.com
DP문제로 마지막에 돌이 1개 혹은 3개 남았을 경우만 판별하면 됩니다.
3. 코드
# 입력
n = int(input())
# DP
if n == 1:
print('CY')
elif n == 2:
print('SK')
elif n == 3:
print('CY')
else:
dp = [-1] * (n+1)
dp[1] = 'CY' # 창영이 이김
dp[2] = 'SK' # 상근이 이김
dp[3] = 'CY' # 창영이 이김
for i in range(4, n+1):
# 돌이 1개 혹은 3개 남은 상황일 때
if dp[i-1] == 'CY' or dp[i-3] == 'CY':
dp[i] = 'SK'
else:
dp[i] = 'CY'
print(dp[n])
dp[i-3]인 경우를 상정해야 하므로, 1부터 3까지는 dp값을 세팅해둡니다.
그리고 4부터 n까지 돌을 1개씩 늘려가며 돌이 1개 혹은 3개 남은 상황일 때 누구 차례인지를 알아보고 승패를 판별합니다.
cf) 돌 게임 1
9655번: 돌 게임
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
백준 9655 돌 게임 문제는 승리조건이 반대입니다. 마지막 돌을 가져가는 사람이 이기는 게임으로, 맨 마지막 print만 정반대로 출력하면 됩니다..
(사실 좀 더 생각해보면.. 돌 게임의 승패는 홀짝으로 나누어지게 됩니다.)
dp 테이블을 출력해보면 쉽게 알 수 있습니다.
'Algorithm' 카테고리의 다른 글
[동적계획법/DP] 백준 9658 돌 게임 4 - 파이썬(Python) (0) | 2023.07.03 |
---|---|
[동적계획법/DP] 백준 9657 돌게임 3 - 파이썬(Python) (0) | 2023.07.03 |
[DP/동적계획법] 백준 14916 거스름돈 - 파이썬(Python) (0) | 2023.07.03 |
[동적계획법/DP] 백준 1890 점프 - 파이썬(Python) (0) | 2023.07.03 |
[DP/동적계획법] 백준 1965 상자넣기 - 파이썬(Python) (0) | 2023.07.02 |
댓글