필승 전략 게임 편집하기


편집하면 당신의 IP 주소가 공개적으로 기록됩니다. 계정을 만들고 로그인하면 편집 시 사용자 이름만 보이며, 위키 이용에 여러 가지 편의가 주어집니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
{{추천 문서}}
{{학술}}
'''필승 전략 게임'''은 어느 한 쪽이 반드시 이길 수 있는 전략을 가진 [[게임]]을 말한다.


== 정의 ==
== 개요 ==
필승 전략 게임을 정의하는 데에 있어 중요한 점은 운이나 실력이 아닌 철저한 '''수학적 계산'''만을 사용하여 이기는 게임인지 여부다. 이 때문에 확률 놀음인 [[포커]]나 실력이 중요한 [[바둑]]은 이 범위에서 제외된다. 또한, 무수히 많은 [[경우의 수]]를 사용한 승리 전략이나 승패가 결정되지 않는 게임 역시 제외된다. 전자의 예로는 [[오목]]이 있으며,<ref>아무런 규칙도 택하지 않을 경우, 먼저 두는 흑에게 필승 전략이 있기는 하지만 경우의 수가 너무 많다.</ref> 후자의 예는 [[틱택토]]가 있다.<ref>두 사람이 모두 전략적으로만 플레이하면 비기게 된다.</ref> 마지막으로, 여러명이 하는 게임이 아닌 일대일 대결 게임만을 다룬다.
'''필승 전략 게임'''이란, 이름 그대로 어느 한 쪽이 반드시 이길 수 있는 전략을 가진 게임을 말한다. 중요한 것은, 운이나 실력이 아닌 철저한 '''수학적 계산'''만을 사용하여 이기는 게임만을 다룬다. 이 때문에 확률 놀음인 [[포커]]나 실력이 중요한 [[바둑]]은 이 범위에서 제외된다. 또한, 무수히 많은 [[경우의 수]]를 사용한 승리 전략이나 승패가 결졍되지 않는 게임 역시 제외된다. 전자의 예로는 [[오목]]이 있으며,<ref>아무런 규칙도 택하지 않을 경우, 먼저 두는 흑에게 필승 전략이 있기는 하지만 경우의 수가 너무 많다.</ref> 후자의 예는 [[틱택토]]가 있다.<ref>두 사람이 모두 전략적으로만 플레이하면 비기게 된다.</ref> 마지막으로, 여러명이 하는 게임이 아닌 일대일 대결 게임만을 다룬다.


어떤 게임의 필승 전략을 찾는 것은 소위 말하는 창의력 수학의 단골 소재. [[수학 경시대회]]에 나오는 경우도 간혹 있다. 대부분의 경우는 방법을 찾는 것만으로 끝나게 되지만, 게임에 따라서는 그 방법이 왜 필승 전략인지 [[증명]]을 해야하는 경우도 있다. 하지만 문제 유형이 거기서 거기라 몇 가지 유형을 풀어봤다면 "아, 이거는 이 방법이구나"하고 감이 온다.
어떤 게임의 필승 전략을 찾는 것은 소위 말하는 창의력 수학의 단골 소재. [[수학 경시대회]]에 나오는 경우도 간혹 있다. 대부분의 경우는 방법을 찾는 것만으로 끝나게 되지만, 게임에 따라서는 그 방법이 왜 필승 전략인지 [[증명]]을 해야하는 경우도 있다. 하지만 문제 유형이 거기서 거기라 몇 가지 유형을 풀어봤다면 "아, 이거는 이 방법이구나"하고 감이 온다.


가장 많이 알려진 필승 전략 게임은 배스킨 라빈스 31이라는 게임일 것이다. 31을 부르면 지는<ref>규칙에 따라서는 이기는</ref> 게임으로, 초등학교 수준의 필승 전략이 존재하지만 이 사실을 모르는 사람이 매우 많다. 그러나 필승 전략을 사용하여 상대방을 농락하는 짓은 착한 위키러라면 하지 말자. 더욱이 게임에 '''돈'''을 건다면…….{{ㅊ|사기죄}}
가장 많이 알려진 필승 전략 게임은 "배스킨 라빈스 31"이라는 게임일 것이다. 31을 부르면 지는<ref>규칙에 따라서는 이기는</ref> 게임으로, 초등학교 수준의 필승 전략이 존재하지만 이 사실을 모르는 사람이 매우 많다. 그러나 필승 전략을 사용하여 상대방을 농락하는 짓은 착한 위키러라면 하지 말자. 더욱이 게임에 '''돈'''을 건다면... {{ㅊ|사기죄}}


== 목록 ==
== 목록 ==
=== NIM 게임 ===
=== NIM 게임 ===
가장 대표적인 유형으로, 개요에서 예시로 들은 배스킨 라빈스 31도 님 게임의 일종이다. 이름의 NIM의 어원은 알려지지 않았으며, 훔치다라는 뜻의 영어 동사 nim에서 왔다는 설,<ref>nim은 현재 사어(死語)다.</ref> 가지고 가다라는 뜻의 독일어 nimm에서 왔다는 설, NIM을 뒤집으면 WIN이기 때문에 NIM이라는 설 등이 있다. 이름 뿐만 아니라 게임 자체의 기원도 명확하지 않은데, 고대 중국의 돌 줍기 게임에서 왔다는 설,<ref>Yaglom, I. M. (2001), "Two games with matchsticks", in Tabachnikov, Serge, Kvant Selecta: Combinatorics, I, Volume 1, Mathematical world 17, American Mathematical Society, p. 1–8</ref> 유럽의 선술집에서 하던 성냥개비 게임에서 왔다는 설 등이 있다. 어느 쪽이든 확실한 증거는 없다. {{ㅊ|그럼 도대체 뭐야 이 게임}}
가장 대표적인 유형으로, 개요에서 예시로 들은 배스킨 라빈스 31도 님 게임의 일종이다. 이름의 NIM의 어원은 알려지지 않았으며, 훔치다라는 뜻의 영어 동사 nim에서 왔다는 설,<ref>nim은 현재는 사어(死語)다.</ref> 가지고 가다라는 뜻의 독일어 nimm에서 왔다는 설, NIM을 뒤집으면 WIN이기 때문에 NIM이라는 설 등이 있다. 이름 뿐만 아니라 게임 자체의 기원도 명확하지 않은데, 고대 중국의 돌 줍기 게임에서 왔다는 설,<ref>Yaglom, I. M. (2001), "Two games with matchsticks", in Tabachnikov, Serge, Kvant Selecta: Combinatorics, I, Volume 1, Mathematical world 17, American Mathematical Society, p. 1–8</ref> 유럽의 선술집에서 하던 성냥개비 게임에서 왔다는 설 등이 있다. 어느 쪽이든 확실한 증거는 없다. {{ㅊ|그럼 도대체 뭐야 이 게임}}


기본적인 룰은 여러 개의 돌 더미 중 하나를 골라 그 더미 안의 돌을 가져가는 것이며, 가장 마지막 돌을 가져가는 사람이 지는 게임이다. 규칙에 따라서는 마지막 돌을 가져가는 사람이 이기게 만들 수도 있으며, 수학적인 필승 전략과 그 원리는 동일하다. 아래 내용은 특별한 말이 없는한 마지막 돌을 가져가는 사람이 패배하는 규칙을 따른다.
기본적인 룰은 여러개의 돌 더미 중 하나를 골라 그 더미 안의 돌을 가져가는 것이며, 가장 마지막 돌을 가져가는 사람이 지는 게임이다. 규칙에 따라서는 마지막 돌을 가져가는 사람이 이기게 만들 수도 있으며, 수학적인 필승 전략과 그 원리는 동일하다. 아래 내용은 특별한 말이 없는한 마지막 돌을 가져가는 사람이 패배하는 규칙을 따른다.


==== 한 더미 ====
==== 한 더미 ====
22번째 줄: 21번째 줄:
위 문제를 해결했으면, 일반적인 경우에 도전해 보자.
위 문제를 해결했으면, 일반적인 경우에 도전해 보자.
{{인용문2|두 사람이 1부터 번갈아 숫자를 부른다. 한 번에 x개의 숫자를 부를 수 있으며, n을 부르면 진다. 필승 전략은 무엇일까?}}
{{인용문2|두 사람이 1부터 번갈아 숫자를 부른다. 한 번에 x개의 숫자를 부를 수 있으며, n을 부르면 진다. 필승 전략은 무엇일까?}}
{{숨기기|풀이|n-1을 부르면 이깁니다. n-1을 부르기 위해서는 n-1-(x+1)<nowiki>=</nowiki>n-x-2을 부르면 됩니다. 이 과정을 계속 반복하여 최초에 불러야 하는 수를 부르면 됩니다.}}
{{숨기기|풀이|n-1을 부르면 이긴다. n-1을 부르기 위해서는 n-1-(x+1)<nowiki>=</nowiki>n-x-2을 부르면 된다. 이 과정을 계속 반복하여 최초에 불러야 하는 수를 부르면 된다.}}
마지막으로, n을 부르면 '''이기는''' 경우의 필승 전략도 생각해 보자.
마지막으로, n을 부르면 '''이기는''' 경우의 필승 전략도 생각해 보자.
{{숨기기|풀이|상대방이 n을 부를 수 없게 할려면, 자신이 n-(x+1)<nowiki>=</nowiki>n-x-1을 부르면 됩니다. 그러면 상대방이 몇 개의 수를 부르든 당신 차례에 n은 x개의 안에 있으므로, 당신은 항상 n을 부를 수 있습니다. 이 과정을 반복하면 됩니다.}}
{{숨기기|풀이|상대방이 n을 부를 수 없게 할려면, 자신이 n-(x+1)<nowiki>=</nowiki>n-x-1을 부르면 된다. 그러면 상대방이 몇 개의 수를 부르든, n은 x개의 안에 있으므로 당신은 항상 n을 부를 수 있다. 이 과정을 반복하면 된다.}}


==== 두 더미 ====
==== 두 더미 ====
30번째 줄: 29번째 줄:
{{인용문2|두 줄의 돌 더미가 있습니다. 첫 번째 줄에는 돌이 10개, 두 번째 줄에는 돌이 7개. 당신이 이기기 위해서는 먼저 해야할까요 나중에 해야할까요? 당신의 필승 전략은?}}
{{인용문2|두 줄의 돌 더미가 있습니다. 첫 번째 줄에는 돌이 10개, 두 번째 줄에는 돌이 7개. 당신이 이기기 위해서는 먼저 해야할까요 나중에 해야할까요? 당신의 필승 전략은?}}
{{숨기기|힌트|2, 2를 만들면 당신의 승리가 보장됩니다. 왜 일까요?}}
{{숨기기|힌트|2, 2를 만들면 당신의 승리가 보장됩니다. 왜 일까요?}}
{{숨기기|풀이|당신이 먼저 해야합니다. 첫 번째 줄에서 돌 3개를 빼 7, 7을 만듭니다. 상대방이 바보가 아닌 이상 한 줄 전체를 빼거나 한 줄에 돌을 하나만 남겨 놓을리는 없습니다. 만약 상대방이 그러면 비웃어 주세요. 그렇지 않으면, 두 줄의 돌의 개수를 똑같이 맞춰 주면 됩니다. 2, 2 상태가 된 후, 상대방이 한 줄을 지우면 당신은 남은 줄에서 돌 하나를 빼면됩니다. 만약 상대방이 돌 하나만 뺐다면 당신이 다른 줄을 지우면 됩니다.}}
{{숨기기|풀이|당신이 먼저 해야합니다. 첫 번째 줄에서 돌 3개를 빼 7, 7을 만듭니다. 상대방이 바보가 아닌 이상 한 줄 전체를 빼거나 한 줄에 돌을 하나만 남겨 놓을리는 없습니다. 만약 상대방이 그러면 비웃어 주세요. 그렇지 않으면, 두 줄의 돌의 개수를 똑같이 맞춰 주면 됩니다. 2, 2 상태가 된 후, 상대방이 한 줄을 지우면 당신은 남은 줄에서 돌 하나를, 상대방이 돌 하나만 빼면 당신은 다른 줄을 지우면 당신의 승리입니다.}}
마지막 돌을 가져가면 승리하는 경우의 전략도 한번 생각해 보자.
마지막 돌을 가져가면 승리하는 경우의 전략도 한번 생각해 보자.
{{숨기기|풀이|똑같은 방법으로, 두 줄의 돌의 개수를 같게 맞춰주면 됩니다. 2, 2가 아닌 1, 1을 만드는 것을 목표로 하면 됩니다. 상대방이 한 줄 전체를 비우면 비웃어 주세요.}}
{{숨기기|풀이|똑같은 방법으로, 두 줄의 돌의 개수를 같게 맞춰주면 됩니다. 2, 2가 아닌 1, 1을 만드는 것을 목표로 하면 됩니다. 상대방이 한 줄 전체를 비우면 비웃어 주세요.}}
64번째 줄: 63번째 줄:
{|width=250
{|width=250
|-
|-
|rowspan="4"|<br /><br /><math>\oplus</math><br />=  
|rowspan="4"|<br/><br/><math>\oplus</math><br/>=  
|001||001||001||000
|001||001||001||000
|-
|-
83번째 줄: 82번째 줄:
==== 증명<ref>Bouton, C. L. (1901–1902), "Nim, a game with a complete mathematical theory", Annals of Mathematics 3 (14): 35–39을 참조.</ref> ====
==== 증명<ref>Bouton, C. L. (1901–1902), "Nim, a game with a complete mathematical theory", Annals of Mathematics 3 (14): 35–39을 참조.</ref> ====
먼저 님 합은 일반적인 [[결합법칙]]과 [[교환법칙]]을 만족함을 쉽게 보일 수 있다. 또한, <math>x\oplus x=0</math>이고, <math>0\oplus x=x</math>이다. 이제 <math>x_1,x_2,\cdots,x_n</math>을 수를 두기 전의 각 더미의 돌의 개수, <math>y_1,y_2,\cdots,y_n</math>을 수를 둔 후의 각 더미의 돌의 개수라 하자. 또한, <math>s=x_1\oplus x_2\oplus\cdots\oplus x_n,\,t=y_1\oplus y_2\oplus\cdots\oplus y_n</math>라 하자. <math>k</math>번째 더미에서 돌을 가져가면, <math>i\neq k</math>일 때 <math>x_i=y_i</math>이고, <math>i=k</math>일 때는 <math>x_i> y_i</math>이다. 그러면,
먼저 님 합은 일반적인 [[결합법칙]]과 [[교환법칙]]을 만족함을 쉽게 보일 수 있다. 또한, <math>x\oplus x=0</math>이고, <math>0\oplus x=x</math>이다. 이제 <math>x_1,x_2,\cdots,x_n</math>을 수를 두기 전의 각 더미의 돌의 개수, <math>y_1,y_2,\cdots,y_n</math>을 수를 둔 후의 각 더미의 돌의 개수라 하자. 또한, <math>s=x_1\oplus x_2\oplus\cdots\oplus x_n,\,t=y_1\oplus y_2\oplus\cdots\oplus y_n</math>라 하자. <math>k</math>번째 더미에서 돌을 가져가면, <math>i\neq k</math>일 때 <math>x_i=y_i</math>이고, <math>i=k</math>일 때는 <math>x_i> y_i</math>이다. 그러면,
:<math>\begin{align*}t&=0\oplus t\\&=s\oplus s\oplus t\\&=s\oplus\left(x_1\oplus x_2\oplus\cdots\oplus x_n\right)\oplus\left(y_1\oplus y_2\oplus\cdots\oplus y_n\right)\\&=s\oplus\left(x_1\oplus y_1\right)\oplus\left(x_2\oplus y_2\right)\oplus\cdots\oplus\left(x_n\oplus y_n\right)\\&=s\oplus0\oplus\cdots\oplus\left(x_k\oplus y_k\right)\oplus0\oplus\cdots\oplus0\\&=s\oplus x_k\oplus y_k\end{align*}</math><br /><math>\therefore t=s\oplus x_k\oplus y_k\quad\cdots\left(*\right)</math>
:<math>\begin{align*}t&=0\oplus t\\&=s\oplus s\oplus t\\&=s\oplus\left(x_1\oplus x_2\oplus\cdots\oplus x_n\right)\oplus\left(y_1\oplus y_2\oplus\cdots\oplus y_n\right)\\&=s\oplus\left(x_1\oplus y_1\right)\oplus\left(x_2\oplus y_2\right)\oplus\cdots\oplus\left(x_n\oplus y_n\right)\\&=s\oplus0\oplus\cdots\oplus\left(x_k\oplus y_k\right)\oplus0\oplus\cdots\oplus0\\&=s\oplus x_k\oplus y_k\end{align*}</math><br/><math>\therefore t=s\oplus x_k\oplus y_k\quad\cdots\left(*\right)</math>
이다.
이다.


이제, 우리가 보이고자 하는 것은 아래의 두 명제이다.
이제, 우리가 보이고자 하는 것은 아래의 두 명제이다.
{{인용문2|<math>s=0</math>이면, 어떤 수를 둬도 <math>t\neq0</math>이다.<br /><math>s\neq0</math>이면, <math>t=0</math>으로 만들 수 있는 수가 존재한다.}}
{{인용문2|<math>s=0</math>이면, 어떤 수를 둬도 <math>t\neq0</math>이다.<br/><math>s\neq0</math>이면, <math>t=0</math>으로 만들 수 있는 수가 존재한다.}}
#먼저, <math>s=0</math>이라 가정하자. 돌이 아예 없는 경우에는 승패가 명확하게 결정 된 상태이므로 의미가 없다. 따라서 수를 둘 수 있다 가정하자. 그러면 (*)에서, <math>t=0\oplus x_k\oplus y_k=x_k\oplus y_k</math>이고, <math>x_k\neq y_k</math>이므로 <math>t=x_k\oplus y_k\neq0</math>이다.
#먼저, <math>s=0</math>이라 가정하자. 돌이 아예 없는 경우에는 승패가 명확하게 결정 된 상태이므로 의미가 없다. 따라서 수를 둘 수 있다 가정하자. 그러면 (*)에서, <math>t=0\oplus x_k\oplus y_k=x_k\oplus y_k</math>이고, <math>x_k\neq y_k</math>이므로 <math>t=x_k\oplus y_k\neq0</math>이다.
#이제 <math>s\neq0</math>이라 가정하자. <math>s</math>를 2진법으로 나타내었을 때, 제일 왼쪽에 존재하는 1의 자리를 <math>d</math>라 하자.<ref>만약 <math>s</math>가 00101101이면, <math>d=6</math>이다.</ref> 또한, <math>s\neq0</math>이기 때문에 <math>d</math>의 존재가 보장된다. 이제 2진법으로 나타냈을 때, <math>d</math>번째 자리의 수가 0이 아닌 <math>x_k</math>를 고른다. 만약 이런 <math>x_k</math>가 존재하지 않는다면, 모든 <math>x_i</math>의 <math>d</math>번째 자리는 0이고, 님 합을 구하면 <math>s</math>의 <math>d</math>번째 자리는 0이 되어 모순이다. 이제 <math>y_k=s\oplus x_k</math>라 하자. <math>x_k> y_k</math>임을 보일 것이다. <math>x_k</math>와 <math>y_k</math>의 <math>d</math>자리 왼쪽은 전부 똑같고,<ref><math>s</math>의 <math>d</math>자리 왼쪽은 전부 0이므로</ref> <math>d</math>자리의 수는 1에서 0으로 줄어든다. 이 차이는 10진법으로 <math>2^d</math>이고, <math>d</math>자리 오른쪽의 수는 아무리 차이나 봤자 <math>2^d-1</math>이다. 따라서 <math>x_k</math>는 <math>y_k</math>보다 적어도 1 크다. 이는 곧 <math>x_k-y_k</math>개의 돌을 <math>k</math>번째 더미에서 가져갈 수 있음을 보장한다. 또한, (*)에서, <math>t=s\oplus x_k\oplus y_k=s\oplus x_k\oplus\left(s\oplus x_k\right)=0</math>이다.
#이제 <math>s\neq0</math>이라 가정하자. <math>s</math>를 2진법으로 나타내었을 때, 제일 왼쪽에 존재하는 1의 자리를 <math>d</math>라 하자.<ref>만약 00101101이란 수가 있으면, <math>d=6</math>이다.</ref> 이제 2진법으로 나타냈을 때, <math>d</math>번째 자리의 수가 0이 아닌 <math>x_k</math>를 고른다. 만약 이런 <math>x_k</math>가 존재하지 않는다면, 모든 <math>x_i</math>의 <math>d</math>번째 자리는 0이고, 님 합을 구하면 <math>s</math>의 <math>d</math>번째 자리는 0이 되어 모순이다. 이제 <math>y_k=s\oplus x_k</math>라 하자. 즉, <math>x_k</math>와 <math>y_k</math>의 <math>d</math>자리 왼쪽은 전부 똑같고,<ref><math>d</math>의 정의에 의해 필연적으로 전부 0이다.</ref> <math>d</math>자리의 수는 1에서 0으로 줄어든 것이다. 다른 말로 하면, <math>x_k-y_k</math>개의 돌을 <math>k</math>번째 더미에서 가져간 것이다. 그러면, (*)에서, <math>t=s\oplus x_k\oplus y_k=s\oplus x_k\oplus\left(s\oplus x_k\right)=0</math>이다.


==== 변형 NIM ====
==== 변형 NIM ====
역사가 오래된 게임인 만큼, 여러 가지 변형된 님 게임이 존재한다. 사실 엄밀하게 따지면, 돌 더미가 한 개인 경우의 님 게임은 이쪽에 속한다.
역사가 오래된 게임인 만큼, 여러가지 변형된 님 게임이 존재한다. 사실 엄밀하게 따지면, 돌 더미가 한 개인 경우의 님 게임은 이쪽에 속한다.
*원형 님 (Circular Nim)
*원형 님 (Circular Nim)
돌 더미가 한 개인 경우의 님 게임과 비슷하지만, 돌들이 '''원형'''으로 놓여있는 경우. 한 번에 가져갈 수 있는 돌의 개수에 제한이 있는 것 까지는 같지만, 가져가는 돌들은 서로 '''인접'''해야 한다. 원조 님 게임과 비슷한 이론을 쓰긴 하지만 이 게임 만의 독특한 수학 이론이 많이 필요하다.<ref>[http://web.calstatela.edu/faculty/sheubac/presentations/SLOtalk.pdf 1], [http://arxiv.org/pdf/1211.0091.pdf 2] 참조</ref>
돌 더미가 한 개인 경우의 님 게임과 비슷하지만, 돌들이 '''원형'''으로 놓여있는 경우. 한 번에 가져갈 수 있는 돌의 개수에 제한이 있는 것 까지는 같지만, 가져가는 돌들은 서로 '''인접'''해야 한다. 원조 님 게임과 비슷한 이론을 쓰긴 하지만 이 게임 만의 독특한 수학 이론이 많이 필요하다.<ref>[http://web.calstatela.edu/faculty/sheubac/presentations/SLOtalk.pdf 1], [http://arxiv.org/pdf/1211.0091.pdf 2] 참조</ref>
103번째 줄: 102번째 줄:
위키백과에서는 님 게임의 일종으로 보고 있지만, 실제로 해보면 님 게임과는 이질적이다. 기본적인 규칙은 아래와 같다.
위키백과에서는 님 게임의 일종으로 보고 있지만, 실제로 해보면 님 게임과는 이질적이다. 기본적인 규칙은 아래와 같다.
#숫자 하나가 있다. 예로 10이 있다 하자.
#숫자 하나가 있다. 예로 10이 있다 하자.
#번갈아가면서 숫자를 두 개의 '''다른''' 숫자로 쪼갠다. 즉, 10→7, 3은 되지만, 10→5, 5는 안 된다.
#번갈아가면서 숫자를 두 개의 '''다른''' 숫자로 쪼갠다. 즉, 10→7, 3은 되지만, 10→5, 5는 안된다.
#자기 차례에 더이상 쪼갤 숫자가 없다면 패배. 즉, 모든 숫자가 1 또는 2면 진다.
#자기 차례에 더이상 쪼갤 숫자가 없다면 패배. 즉, 모든 숫자가 1 또는 2면 진다.
이 게임의 필승 전략은 [[Wikipedia:Sprague-Grundy theorem|스프라그-그룬디 정리]]를 응용하여 해결할 수 있다. 영포자나 수포자를 위해 아주 정말 단순하게 결과만을 설명하자면, 각 숫자에는 수학적으로 계산된 님 더미 숫자(nim heap size, 님 값)가 있는데, 수를 쪼갠 뒤의 님 합이 0이 되도록 해주면 이긴다. 참고로 위 에서는 님 합이 2진법에서만 정의된다 하였는데, 그룬디 게임에선 10진법의 님 합을 정의해야 한다. 그룬디 게임에서의 님 합의 정의는 다음과 같다.
이 게임의 필승 전략은 [[Wikipedia:Sprague-Grundy theorem|스프라그-그룬디 정리]]를 사용하여 해결할 수 있다. 영포자나 수포자를 위해 아주 정말 단순하게 설명하자면, 각 숫자에는 수학적으로 계산된 님 더미 숫자(nim heap size, 님 값)가 있는데, 수를 쪼갠 뒤의 님 합이 0이 되도록 해주면 이긴다. 참고로 위 에서는 님 합이 2진법에서만 정의된다 하였는데, 10진법에서도 특별한 오류없이 잘 정의된다. 10진법에서의 님 합의 정의는 다음과 같다.
#더하는 두 수(님 값이 아니라 원 수)가 같으면 0.
#더하는 두 수(님 값이 아니라 원 수)가 같으면 0.
#더하는 두 수가 다르면 평범하게 더해준다.
#더하는 두 수가 다르면 평범하게 더해준다.
128번째 줄: 127번째 줄:


=== 숫자 지우기 ===
=== 숫자 지우기 ===
여러 개의 숫자가 있고, 번갈아 가면서 숫자를 지울 때, 최후에 남은 숫자 하나, 혹은 둘의 규칙성에 따라 승패가 결정되는 게임. 경우에 따라서는 숫자를 지운 뒤 규칙에 따라 새로운 숫자를 쓰는 경우도 있다. 위의 님 게임과 그룬디 게임이 대학 이상에서나 볼 수 있다면, 이쪽은 [[수학 경시대회]]에 자주 출몰하는 유형. 중, 고등학생을 대상으로 하는 문제이기 때문에 복잡한 수학이론 보다는 간단한 수학적 사실을 활용하는 문제가 많다. 또한, 문제가 하나 같이 다 "칠판에 x개의 수, 1, 2, …, x가 있습니다. 갑과 을이 번갈아…"로 시작한다는 것도 특징이라면 특징. 사실 이 유형은 만들려면 한 없이 많이 만들 수 있다.
{{인용문2|칠판에 1부터 n까지의 자연수가 있다. 번갈아 가면서 두 수를 골라 지우고, 칠판에 두 수의 합, 또는 차를 새로 적는다. 최후에 남은 숫자가 짝수면 선공의 승리, 홀수면 후공의 승리일 때, 당신의 필승 전략은?}}
{{숨기기|힌트|'''홀수와 짝수가 서로 연산되는 경우에만 홀수가 나온다. 홀수의 개수를 세어볼것 이해가 안되면 모든 짝수는 0 모든 홀수는 1로 놓고 계산해볼것''' }}
{{숨기기|풀이|끝까지 해보면 결국 칠판의 모든 수를 다 더한 것과 결과가 같습니다. 중간에 두 수의 차를 구해도, 결과의 기우성에는 변함이 없죠. n을 4로 나눴을 때 나머지가 1, 2면 최후에 홀수가 남기 때문에 후공을, n을 4로 나눴을 때 나머지가 0, 3이면 최후에 짝수가 남기 때문에 선공을 하면 됩니다. 전략은 필요 없고, 아무 생각없이 숫자를 지우기만 하면 됩니다.}}
{{인용문2|칠판에 1부터 31까지의 자연수가 있다. 번갈아 가면서 숫자 하나를 지우는데, 최후에 남은 두 숫자의 합이 5로 나누어 떨어지면 선공의 승리, 아니면 후공의 승리다. 이 때, 당신의 필승 전략은?}}
{{숨기기|힌트|5로 나눈 나머지에 따라 숫자를 다섯 가지 종류로 분류가 가능합니다.}}
{{숨기기|풀이|선공을 해야 합니다. 5로 나눈 나머지에 따라 숫자를 다섯 가지로 분류하면, A<nowiki>=</nowiki>{1, 6, 11, 16, 21, 26, 31}, B<nowiki>=</nowiki>{2, 7, 12, 17, 22, 27}, C<nowiki>=</nowiki>{3, 8, 13, 18, 23, 28}, D<nowiki>=</nowiki>{4, 9, 14, 19, 24, 29}, E<nowiki>=</nowiki>{5, 10, 15, 20, 25, 30}입니다. 당신이 A 그룹의 숫자를 지우면 상대방은 D 그룹의 숫자를, B→C, C→B, D→A, E→E를 지워줘야 합니다. 그러면 최후에 남는 세 수는 A 그룹에서 하나, 그리고 대응되는 두 그룹<ref>(A, D), (B, C), (E, E) 중 하나</ref>에서 각각 하나씩이고, 당신은 A 그룹의 숫자 하나를 지워주면 됩니다. 만약 상대방이 전략적이지 못해 대응되는 그룹의 숫자를 지우지 않으면 조금 꼬이게 되는데, 마지막 턴에 대응되는 두 그룹에서 각각 하나씩, 그리고 E 그룹을 제외한 다른 그룹에서 하나, 이렇게 3 숫자가 남게 맞춰주면 됩니다.}}
{{인용문2|칠판에 2부터 1000까지의 자연수가 있다. 번갈아 가면서 숫자 하나를 지우는데, 최후에 남은 두 수가 [[서로소]]이면 선공의 승리, 아니면 후공의 승리다. 이 때, 당신의 필승 전략은?}}
{{숨기기|힌트|연속된 두 수는 항상 서로소입니다.}}
{{숨기기|풀이|선공을 해야 합니다. 먼저 2를 지웁니다. 이제, 상대방이 홀수를 지우면 그 뒤의 수를, 짝수를 지우면 그 앞의 수를 지우면 최후에는 이웃한 두 수만이 남고, 이웃한 두 수는 항상 서로소라 선공의 승리입니다.<ref>[[최대공약수]]의 성질 중, <math>\gcd\left(a+kb,b\right)=\gcd\left(a,b\right)</math>이 있다. 이를 활용하면, <math>\gcd\left(n+1,n\right)=\gcd\left(\left(n+1\right)-n,n\right)</math><br /><math>=\gcd\left(1,n\right)=1</math></ref>}}
{{인용문2|칠판에 10부터 99까지의 수가 있다. 번갈아 가면서 숫자를 최대 3개까지 지우는 데, 지운 숫자 위에 그 수의 각 자릿수의 합을 적는다. 만약 똑같은 각 자릿수의 합이 3번째 나오면, 그 사람의 패배다. 이 때, 당신의 필승 전략은?}}
{{숨기기|힌트|가능한 자릿수의 합과 그 개수부터 찾아보세요.}}
{{숨기기|풀이|선공을 해야 합니다. 가능한 각 자릿수의 합은 1부터 18까지고, 이 중 1과 18은 단 한 번 밖에 나올 수 없습니다. 2부터 17까지는 두 번 이상 나옵니다. 그럼 지울 수 있는 수의 최댓값은 2+2×16<nowiki>=</nowiki>34 입니다. 이제, 당신이 먼저 10과 99를 지웁니다. 그 뒤에 상대방이 1개를 지우면 3개를, 2개를 지우면 2개, 3개를 지우면 1개씩 지워주면 당신의 차례에 34개의 수를 모두 지우게 됩니다. 이 뒤에 상대방이 숫자를 지우면 같은 각 자릿수의 합이 세 번째 등장하고, 상대방의 패배입니다. '''아 물론, 당신이 수를 지울 때 같은 각 자릿수의 합이 세 번 등장하지 않게 지워야 합니다.'''}}


=== 기타 ===
=== 기타 ===
어느 문단에도 속하기 애매한 필승 전략 게임들. 윗 문단의 숫자 지우기가 [[정수론]]적 성질을 주로 활용한다면, 이쪽은 그 외 수학 성질들을 활용하는 문제가 많다.
{{인용문2|<math>?x^n+?x^{n-1}+\cdots+?x+?=0</math>이란 방정식이 있다 하자. 번갈아 가면서 ?에 숫자를 하나씩 채워 넣는다 (굳이 실수일 필요는 없다). 모든 ?가 채워졌을 때, 그 방정식에 정수해가 존재하면 선공의 승리, 그렇지 않으면 후공의 승리다. 당신의 필승 전략은?}}
{{숨기기|힌트|'''짠! 너무 쉬워서 힌트가 필요 없어요!''' <s>아니 이 녀석이 또...</s>}}
{{숨기기|풀이|상수항이 0이면 x{{=}}0을 무조건 근으로 가집니다. 즉, 마지막 ?를 채우는 사람이 반드시 이기게 되죠. n이 짝수면 ?의 개수가 홀수이므로 선공의 승리, 홀수면 ?가 짝수 개 있으므로 후공의 승리입니다.}}
{{인용문2|2부터 시작하여, 번갈아 가면서 그 수의 약수를 원래 수에 더하는 게임을 한다 하자. 예를 들면, 2→3→6→9→18→24→…와 같이. 100 이상의 수를 먼저 부르면 이기는 것이라 할 때, 필승 전략은 무엇인가?}}
{{숨기기|힌트|49를 부르면 이깁니다.}}
{{숨기기|풀이|먼저 3을 부르면 됩니다. 홀수의 약수는 모두 홀수이므로, 상대방이 어떤 약수를 더하든 짝수가 됩니다. 따라서 상대방은 절대 49를 부를 수 없죠. 반면, 당신은 1씩만 올려주면 여유롭게 49를 부를 수 있습니다. 만약 그 전에 상대방이 50이상의 수를 부르면 두 배를 하고, 당신의 승리. 당신이 49를 부르면 상대방이 무슨 약수를 더하든 50 이상이 되고, 당신이 이기게 됩니다.}}
== 관련 용어 ==
*[[조합론적 게임 이론]] (Combinatorial game theory): 완전한 정보를 가진 턴제 게임에 대해 수학적으로 연구하는 학문. 불완전한 정보를 가진 게임에 대해 연구하는 학문은 [[게임 이론]] 참조.
*완전한 정보 (Perfect information): 조합론적 게임 이론에선, 수를 두기 위한 '''모든''' 정보를 알고 있는 것을 말한다.
*공정 게임 (Impartial game): 수를 둘 때, 선공인지 후공인지에만 영향을 받고, 그 외의 모든 규칙이나 요인과는 관계가 없는 게임. 다르게 말하면, 선공과 후공의 차이는 먼저 하냐 나중에 하냐, 그것 뿐인 게임을 말한다. 예를 들면, 선공에 여러 가지 제한이 붙는 [[오목]]은 공정 게임이 아니며, 자신의 말만 움직일 수 있는 [[바둑]]이나 [[체스]] 역시 공정 게임이 아니다. 반면, NIM 게임은 공정 게임이다. {{ㅊ|필승 전략이 있는데???}}
*편파 게임 (Partisan game): 공정 게임이 아닌 게임. 대부분의 게임이 이 분류에 속한다.
*노말 게임 (Normal game): 최후의 수를 두는 사람이 이기는 게임. 즉, 자기 차례에 할 게 없으면 진다.
*미저 게임 (Misère game): 노말 게임의 반대로, 지는 것이 이기는 게임. {{ㅊ|모순}} 다르게 표현하면, 최후의 수를 두는 사람이 지는 게임이다.
*님 (Nim): 원래는 님 게임만을 가르키지만, 게임의 특성 때문에 필승 전략이 있는 게임을 NIM이라 부르기도 한다.
*님 힙 (Nim-heap): 님 게임에서, 특정 값들의 묶음을 말한다.
*님버(Nimber): 님 힙의 값.
*님 값 (Nim value, Grundy value): 공정 게임과 동일한 특수한 값.
*님 합 (Nim-sum): 님 값을 더하는 특수한 방법.
== 관련 문서 ==
*{{ㅊ|[[사기죄]]}}
*{{ㅊ|[[승부조작]]}}
*[[게임 이론]]


== 외부 링크 ==
== 관련 항목 ==
* [[Wikipedia:Nim]]
* [[Wikipedia:Sprague–Grundy theorem]]: 간단히 설명하면, 모든 노말 공정 게임은 님버와 동등하다는 정리이다.
* [http://www.math.ucla.edu/~tom/Game_Theory/comb.pdf 공정 게임 이론]
* [http://www.transience.com.au/pearl3.html 3줄 짜리 님]
* [http://www.cut-the-knot.org/Games/SuperNim/SNim.shtml 슈퍼 님]
* [http://www.cut-the-knot.org/Curriculum/Games/Grundy.shtml 그룬디 게임]


{{각주}}
{{각주}}
[[분류:수학]]
[[분류:수학]]
[[분류:추상 전략 게임]]
리브레 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포됩니다(자세한 내용에 대해서는 리브레 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
글이 직접 작성되었거나 호환되는 라이선스인지 확인해주세요. 리그베다 위키, 나무위키, 오리위키, 구스위키, 디시위키 및 CCL 미적용 사이트 등에서 글을 가져오실 때는 본인이 문서의 유일한 기여자여야 하고, 만약 본인이 문서의 유일한 기여자라는 증거가 없다면 그 문서는 불시에 삭제될 수 있습니다.
취소 편집 도움말 (새 창에서 열림)

| () [] [[]] {{}} {{{}}} · <!-- --> · [[분류:]] · [[파일:]] · [[미디어:]] · #넘겨주기 [[]] · {{ㅊ|}} · <onlyinclude></onlyinclude> · <includeonly></includeonly> · <noinclude></noinclude> · <br /> · <ref></ref> · {{각주}} · {|class="wikitable" · |- · rowspan=""| · colspan=""| · |}

이 문서에서 사용한 틀: