9655
https://www.acmicpc.net/problem/9655
9655번: 돌 게임
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
[정답]
1
2
3
4
5
6
7
8
9
10
11
12
|
import sys
N = int(sys.stdin.readline())
dp = [-1]*1001
dp[1] = 1
dp[2] = 0
dp[3] = 1
for i in range(4, N+1):
if dp[i-1] or dp[i-3]:
dp[i] = 0
else:
dp[i] = 1
print('CY' if dp[N] == 0 else 'SK')
|
cs |
.
.
.
[풀이]
dynamic programming를 이용할 수 있는 문제.
규칙을 발견할 때까지 몇번 해보면 알 수 있다.
돌이 3개 또는 1개가 남는 순간 승패가 결정된다.
따라서 dp에 값을 저장시켜가며 결과에 도달할 수 있다.
그런데 하다보면 간단한 사실을 깨달을 것이다.
N이 홀수일 때와 짝수일 때에 따라서 승패가 결정된다.
9656번도 같은 문제이므로 다음 문제를 보자.
9656
https://www.acmicpc.net/problem/9656
9656번: 돌 게임 2
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
www.acmicpc.net
[정답]
1
|
print('SK' if int(input())%2 == 0 else 'CY')
|
cs |
.
.
.
[풀이]
9655번이랑 같은 문제인데 승패만 뒤집혀 결과값이 반대로 나오는 문제이다.
똑같이 해주고 결과값만 반대로 출력해주면 된다.
앞서 홀짝에 따라 결과가 바로 나오는 것을 알아챘다.
따라서 간단하게 한줄로 코딩하여 풀 수 있다.
p.s.
처음에 어떻게 해야하는 문제인가 싶었지만 6회정도 손으로 적어보니 완벽히 파악되는 문제였다.
왜 같은 문제가 여러개 있는지도 의문이다.
문제가 의도한 것이 dp였겠지 싶어서 dp로 끄적여봤다.
베스킨라빈스 31이 생각나는 문제다.
'백준 문제풀이' 카테고리의 다른 글
[백준 1449] 파이썬 : 수리공 항승 (0) | 2021.10.22 |
---|---|
[백준 7785] 파이썬 : 회사에 있는 사람 (0) | 2021.10.17 |
[백준 2947] 파이썬 : 나무 조각 (0) | 2021.10.15 |
[백준 1026] 파이썬 : 보물 (0) | 2021.10.14 |
[백준 10157] 파이썬 : 자리배정 (0) | 2021.10.13 |