문제는 : https://arca.live/b/math/39723739

----------------------------------------------------------------------------------------------

수학채널 게임의 규칙은 다음과 같다:
1, A와 B는 번갈아가면서 숫자를 쓰며, A가 먼저 숫자를 쓴다.

2, 처음에는 숫자가 1이 써져 있으며, 숫자가 k가 써져 있으면 각 차례의 사람은 이 숫자를 지우고 k+1이나 2k를 다시 써 넣는다.

3, n 이상의 수는 쓸 수 없으며, 더이상 수를 쓸 수 없는 사람이 죽는다.


(1) n이 짝수일 때 누가 필승전략을 가지는가?

(2) n = 4^t +1일때 누가 필승전략을 가지는가?

(3) 일반적인 n에 대해 누가 필승전략을 가지는가?

----------------------------------------------------------------------------------------------

댓글로 다른 분들도 풀어주셨고 저도 어느정도 써놓기는 했는데, 좀 더 "건너뛰는 부분이 적은" 풀이를 작성해 보도록 하겠습니다.

이것도 아주 formal 하지는 않고, 왠지 자꾸 알고리즘의 psuedo code를 짜는 듯한 형태가 되는군요. 😅

대체로 dynamic programming 의 응용입니다.


T(n, k)를 다음과 같이 정의한다.

T(n, k) = 주어진 숫자가 n일 때 k를 쓴 사람에게 필승 전략이 있으면 1, 상대에게 필승 전략이 있으면 0


예컨대 한 사람이 n 이상의 수를 썼다면, 문제의 조건에 따라서 그 사람은 패배한다. 따라서 T(n, m) = 0   for  m ≧ n

만약 한 사람이 n-1을 썼다면, 그 다음 사람은 n 이상의 수를 쓸 수밖에 없으므로 n-1 을 쓴 사람이 승리한다.

따라서 T(n, n-1) = 1


T(n, k)의 값은 다음과 같다.

T(n, k) = 0   (k ≧ n  또는  T(n, 2k) = 1  또는  T(n, k+1) = 1 인 경우)

T(n, k) = 1  (k < n 이며 T(n, 2k) = T(n, k+1) = 0 인 경우)


이 게임은 B가 1을 쓰고 시작하는 것과 같으므로 T(n, 1) = 1 이면 B의 승리, T(n, 1) = 0 이면 A의 승리이다.


(1) n 이 짝수인 경우.  Let n = 2m

m ≦ k < 2m 인 k 에 대해서, T(n, 2k) = L 이므로 T(n, k) = 1 - T(n, k+1)

따라서 k가 홀수이면 T(n, k) = 1, k가 짝수이면 T(n, k) = 0

k < m 인 경우는 

T(n, 2m-2) = 0 이므로 T(n, m-1) = 1 - T(n, m)

T(n, 2m-4) = 0 이므로 T(n, m-2) = 1 - T(n, m-1)

...

따라서 k < 2m 인 모든 자연수 k 에 대해서  가 홀수이면 T(n, k) = 1, k가 짝수이면 T(n, k) = 0

고로 T(n, 1) = 1 이므로 B의 승리.


(2) n 이 홀수이고 n = 2m+1 에서 m이 짝수인 경우

Let m = 2v, n = 4v + 1

2v+1 ≦ k 4v 인 k 에 대해서,  k가 짝수이면 T(n, k) = 1, k가 홀수이면 T(n, k) = 0

v+1 ≦ k 2v 인 k 에 대해서, 2v+1 < 2k 4v 이므로 T(n, 2k) = 1, 따라서 T(n, k) = 0

즉 v+1 ≦ k 2v 인 모든 k 에 대해서 T(n, k) = 0 이므로

k v인 k 에 대해서  T(n, k) = T(4v+1) = T(v+1, k)


그러므로 n = 4^t +1일 때

T(n, 1) = T(4^t + 1, 1) = T(4^(t-1) + 1, 1) = T(4^(t-2) + 1, 1) = ... = T(4^0 + 1, 1) = T(2, 1) = 1

따라서 B의 승리


(3)  n 이 홀수이고 n = 2m+1 에서 m이 짝수인 경우는 (2)에서 다루었고, m 이 홀수인 경우

Let m = 2v + 1, n = 4v + 3

2v+2 ≦ k 4v+2 인 k 에 대해서,  k가 짝수이면 T(n, k) = 1, k가 홀수이면 T(n, k) = 0

v+1 ≦ k 2v+1 인 k 에 대해서, 2v+2   2k 4v+2 이므로 T(n, 2k) = 1, 따라서 T(n, k) = 0

즉 v+1 ≦ k 2v 인 모든 k 에 대해서 T(n, k) = 0 이므로

k v인 k 에 대해서  T(n, k) = T(4v+3) = T(v+1, k)


m이 짝수인 경우와 홀수인 경우를 종합하면 T(4v+1, 1) = T(4v+3, 1) = T(v+1, 1) 를 얻는다.

즉 n이 홀수라면 T(n, 1) = T([n/4]+1, 1)  ([r] 은 r보다 작거나 같은 최대의 정수)

이제 다음과 같은 수열을 생각한다. 

- a_1 = n

- a_(i+1) = [a_i / 4] + 1

- 모든 i에 대해서 a_i 는 자연수, a_j  = 1 이면 a_j 는 수열의 마지막 원소

이 수열의 원소 중 하나라도 짝수이면 T(n, 1) = 1 이 되므로, T(n, 1) = 0 일 필요충분조건은 이 수열의 모든 원소가 홀수라는 것이다.


이는 1 에서 시작해서 v+1 => 4v+1, 4v+3 의 과정을 통해서 생성할 수 있는 홀수들에 대해서만 T(n, 1) = 0 을 만족한다는 말과 같다.

그런데 v+1 = 2^m_1 + 2^m_2 + ... + 2^m_k + 1(m_1 > m_2 > ... > m_k >= 1 인 자연수) 의 형태로 나타냈을 때

m_i 가 모두 홀수임을 v+1 이 만족한다면

4v+1 =  2^(m_1 + 2) + 2^(m_2 + 2) + ... + 2^(m_k + 2) + 1

4v+3 =  2^(m_1 + 2) + 2^(m_2 + 2) + ... + 2^(m_k + 2) + 2^1 + 1

4v+1, 4v+3 역시 이를 만족한다.


따라서 A 가 승리할 필요충분조건은

n 이 홀수이고

n = 2^m_1 + 2^m_2 + ... + 2^m_k + 1(m_1 > m_2 > ... > m_k >= 1 인 자연수) 의 형태로 나타냈을 때 m_i 가 모두 홀수라는 것이다.