n개의 타워가 있고 각 타워는 m 높이이다.
플레이어는 타워 높이 x를 x의 약수만큼 줄일 수 있다. (자기에게 유리하도록 줄일 것)
현재 플레이어가 움직일 수 없다면 게임은 끝난다. (모든 타워가 1일 경우)
첫번째 플레이어가 이기면 1을 리턴, 아니면 2를 리턴.
무조건 1번이 처음 시작.
예외 케이스를 가지치기 해나간다.
1. m = 1인 경우 : 처음부터 모든 타워의 높이가 1번이므로 무조건 2번이 이긴다.
2. n이 짝수인 경우 : 1번이 아무리 유리하게 골라도, 2번 플레이어가 따라할 수 있으므로 무조건 2번이 이긴다.
3. 그 외의 경우 1번이 이긴다.
int towerBreakers(int n, int m) {
if (m == 1)
return 2;
else if (n%2 == 0)
return 2;
return 1;
}
ㅎ 영어가 유난히 눈에 안들어왔던 ...