Algorithm PS/Baekjoon Online Judge
[BOJ/백준] 9657 돌 게임 3 (S3)
kyung.Kh
2024. 5. 22. 22:23
문제
https://www.acmicpc.net/problem/9657
풀이
돌이 N개가 있고 상근이가 먼저 게임을 시작하며 돌을 1개, 3개, 또는 4개를 가져갈 수 있을 때 마지막 돌을 가져가는 사람이 이기는 게임이다. 문제에 '완벽하게' 라는 조건이 붙었기 때문에 상근이가 이기는 쪽으로 게임을 해야 한다.
돌의 개수 별로 돌을 가져간 횟수?를 저장하는 배열 arr을 생성한다.
돌을 한 번에 4개를 가져갈 수 있기 때문에 N=1 ~ N=4까지는 고정 값을 넣어주었다.
- N = 1 : 상근이가 돌 1개를 가져가면 게임이 끝난다. → 상근 Win : arr[1] = 1
- N = 2 : 상근이가 돌 1개를 가져가고 창영이가 돌 1개를 가져가면 게임이 끝난다. → 창영 Win : arr[2] = 2
- N = 3 : 상근이가 돌 3개를 가져가면 게임이 끝난다. → 상근 Win : arr[3] = 1
- N = 4 : 상근이가 돌 4개를 가져가면 게임이 끝난다. → 상근 Win : arr[4] = 1
N = 5 부터는 for 루프를 돌려 Bottom-up 형식으로 밑에서부터 배열을 채워 나간다. arr[n] = 1이면 상근이가 이기고, arr[n] = 2면 창영이가 이긴다.
Code
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
int arr[] = new int [1001];
arr[1] = 1; // sk
arr[2] = 2; // cy
arr[3] = 1; // sk
arr[4] = 1; // sk
for (int i = 5; i <= n; i++) {
if (arr[i-1] % 2 == 0 || arr[i-3] % 2 == 0 || arr[i-4] % 2 == 0) {
arr[i] = 1;
} else {
arr[i] = 2;
}
}
if (arr[n] % 2 == 0) {
bw.write("CY");
} else {
bw.write("SK");
}
bw.flush();
bw.close();
}
}
728x90