반응형
문제
돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 지게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
입력
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
출력
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
예제 입력 1
4
예제 출력 1
SK
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
private static BufferedReader br;
private static int N;
public static void main(String[] args) throws NumberFormatException, IOException {
br=new BufferedReader(new InputStreamReader(System.in));
N=Integer.parseInt(br.readLine());
if(N%2==0) System.out.println("SK");
else System.out.println("CY");
}
}
1. 상근이와 창영이가 번갈아서 돌을 가져가는 경우를 생각해보았습니다.
1->1 CY
2->1, 1 SK
3->1,1,1 CY
4->3,1 SK
...
위 과정을 통해 짝수인 경우 상근, 홀수인 경우 창영이가 이긴다는 것을 알 수 있습니다.
2. DP를 이용하여 해결 가능합니다.
dp[n] = Math.min(dp[n-1], dp[n-3]) +1
게임을 완벽하게 한다고 했으므로 최솟값을 선택해야 한다는 것을 이용하여 dp 식을 세울 수 있었습니다.
반응형
'코딩테스트 > 다이나믹 프로그래밍(Dynamic Programming))' 카테고리의 다른 글
[Java] 백준 15624번 : 피보나치 수 7 (0) | 2022.05.16 |
---|---|
[Java] 백준 10826번 : 피보나치 수 4 (0) | 2022.05.16 |
[Java] 백준 2670번 : 연속부분최대곱 (0) | 2022.05.16 |
[Java] 백준 2629번 : 양팔저울 (2) | 2022.04.25 |
[Java] 백준 14501번 : 퇴사 (0) | 2022.04.12 |