돌 게임은 두 명이서 즐기는 재밌는 게임이다.
탁자 위에 돌 N개가 있다. 상근이와 창영이는 턴을 번갈아가면서 돌을 가져가며, 돌은 1개 또는 3개 가져갈 수 있다. 마지막 돌을 가져가는 사람이 게임을 지게 된다.
두 사람이 완벽하게 게임을 했을 때, 이기는 사람을 구하는 프로그램을 작성하시오. 게임은 상근이가 먼저 시작한다.
첫째 줄에 N이 주어진다. (1 ≤ N ≤ 1000)
상근이가 게임을 이기면 SK를, 창영이가 게임을 이기면 CY을 출력한다.
4
SK
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
ArrayList<String> win = new ArrayList<>();
win.add("CY");
win.add("SK");
win.add("CY");
int index = 3;
if(N>3) {
while (win.size()<N) {
if(win.get(index-1)==win.get(index-3)) {
if(win.get(index-1)=="CY") {
win.add("SK");
} else {
win.add("CY");
}
} else {
win.add("SK");
}
index++;
}
}
System.out.print(win.get(N-1));
}
}
또 문제를 정확하게 읽지 않았던 문제.. 마지막 돌을 가져가는 사람이 지는 것인데 이기는 걸로 이해하고 풀어서 정답이 틀렸었다. 물론 코드 몇 줄만 바꾸면 되는거였지만, 게임 이론 문제가 제일 어려운 이유는 규칙을 찾는 게 어렵기 때문인데 이번에는 다행히 방법을 금방 떠올릴 수 있었다. 아직 실버 단계라 자만하긴 좀 그렇지만, 그래도 어느정도 알고리즘 생각하는 데 시간이 덜 소요되는 것 같다.