https://www.acmicpc.net/problem/9659
코드설명
동적계획법(DP, Dynamic Programming) + 게임이론(Game Theory) + 수학(Math) 입니다.
이 문제의 경우, 일반적인 동적계획법으로는 적용이 불가합니다.
이유는 N이 1조입니다. 10^12 입니다.
그렇기에, 배열의 Size는 오직 int형(21억)개만 가능하기에, 동적계획법 적용이 어렵습니다.
문제의 특성을 파악해서 풀어야하는 문제였습니다.
직접 N=1, N=2, N=3... 을 하다보면 규칙을 찾을 수 있습니다.
1. 만약 돌이 홀수개라면, 상근이가 이깁니다.
2. 만약 돌이 짝수개라면, 창영이가 이깁니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
private static long N, T, M;
private static int answer = 0;
private static int[][] cache;
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Long.parseLong(st.nextToken());
System.out.println(N % 2 == 1 ? "SK" : "CY");
}
}