https://www.acmicpc.net/problem/9661
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static long N;
static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Long.parseLong(br.readLine());
}
static void solution() {
System.out.println((N % 5 == 0 || N % 5 == 2) ? "CY" : "SK");
}
static double baseLog(long num, long base) {
int exponent = (int)Math.floor(Math.log10(num) / Math.log10(base));
return Math.pow(base, exponent);
}
public static void main(String[] args) throws IOException {
input();
solution();
}
}
개로 돌을 번갈아가며 가져갔을 때, N이 1일 때부터 20까지 상근이가 이길 수 있는 상황이 존재하는지에 대한 규칙을 찾기 위해 아래와 같은 코드로 확인합니다.
boolean[] SKWin = new boolean[20];
for(int rock = 1; rock <= 20; rock++) {
int x = 0;
while(rock - Math.pow(4, x) >= 0) {
// 창영이가 지는 상황이 있다면
if(!SKWin[rock - (int)Math.pow(4, x)]) {
SKWin[rock] = true; // 상근이가 이기는 상황이 존재할 수 있다
break;
}
x++;
}
}