출처:http://cafe.naver.com/ma9ma92013/660217
우선 숫자야구의 기본적인 원리를 말씀드립니다.
이 숫자야구 게임의 목표는 3자리수 하나를 맞추는 것입니다. 이 3자리수는 같은 숫자를 2개 이상 포함하지 않습니다. 즉, 112 같은 1이 2개 이상 포함된 숫자는 답이 될 수 없습니다.
한 개의 숫자를 시도할 때마다, 정답과 비교해서 몇 스트라이크(s) 몇 볼(b)인지를 알려줍니다. 스트라이크의 개수는 숫자와 자리가 일치하는 것의 개수, 볼의 개수는 숫자는 일치하는데 자리가 일치하지 않는 것의 개수입니다. 예를 들어, 137이 답일 경우 123을 입력하면 1의 자리(100의 자리)가 일치하고 3의 자리가 일치하지 않으므로 1s 1b가 되는 것이지요.
말이 야구지, 수학적인 확률 게임을 해야 하는데요. 다행히 10번까지 시도할 수 있어, 어지간하면 보상을 획득할 수 있습니다. 저같은 소과금유저에겐 이런 보상 하나가 아쉽죠.
10번 안에 보상을 얻을 수 있는 전략을 세워 보겠습니다.
1. 처음 3번은 123, 456, 789를 입력합니다. 이것은 어떤 숫자가 있는지를 알아보는 과정입니다. 보통 이 3개의 숫자 중 폭투가 하나쯤은 나올텐데요. 폭투는 3개의 숫자 모두가 없다는 뜻으로 정답을 추리할 때 이를 배제하고 할 수 있어 상당히 좋은 것 중 하나입니다. 1b나 1s정도보다는 폭투가 더 나은 셈이죠(뭥미?)
저의 경우 135, 246, 789 이런 식으로 입력한 적도 있습니다. 반드시 123, 456, 789일 필요는 없고요. 처음 3번의 시도는 서로 숫자가 겹치지 않게 하는 편이 좋습니다. 물론 2s나 1s2b정도의 최상의 결과가 나오면 전략이 다소 수정되어야겠지만요.
2. 위의 과정에서 어떤 결과가 나왔느냐에 따라 여러 전략을 세울 수가 있는데요. 여기서 정답을 맞추지 못했을 경우(즉, 123, 456 789중에 답이 없을 경우) 다음과 같은 결과 중 하나일 것입니다.
(1) 셋 중 하나가 2s나 1s2b 혹은 3b의 엄청난 힌트
(2) 셋 중 하나가 정답의 숫자를 2개 가지고 있고(1s1b 또는 2b), 나머지 중 하나(1s 혹은 1b)가 있을 경우.
(3) 3개의 결과가 각각 1개씩의 결과를 가지고 있을 경우(최악의 경우)
(4) 3개에 모든 숫자가 포함되어 있지 않을 경우
(1)의 경우에는 남아있는 경우의 수가 많지 않으므로, 모든 경우를 시도해보면 됩니다.
* 2s - 스트라이크가 어딘지를 먼저 찾아보면 됩니다.
만약 123이 2s가 나왔다면 423 같은 한개의 숫자만 바뀐 숫자를 시도해봅니다. 만약 423이 1s가 나왔다면 정답의 100의 자리수는 1이라는 결론을 얻을 수 있겠죠(물론 1s가 안 나올수도 있으며, 이럴 경우는 좀더 생각해보시기 바랍니다).
* 1s2b - 스트라이크의 경우의 수가 3가지이므로 2번안에 답을 찾을 수 있다.
- 만약 123이 1s2b가 나왔다면 s의 경우의 수가 1, 2, 3의 3가지가 있으며 각각에 해당하는 정답의 경우의 수는 132, 321, 213 이렇게 3가지가 있습니다. 햇갈릴 경우, 기회가 3번이상 남았다면 이 3가지를 모두 시도해보는것도 좋습니다.
*3b - 숫자를 모두 알고 있으므로, 1s2b를 얻을 목적으로 순서를 바꾸면서 시도해보면 이 역시 어렵지 않습니다.
(2) 셋 중 하나는 폭투가 나왔어야 합니다. 숫자의 후보가 6개이므로, 2개가 맞는 쪽의 숫자가 무엇일지를 추론한다는 생각으로 접근합니다. 제가 위에 든 예처럼 123에서 1s 1b, 789에서 1b를 얻었을 경우, 123에서 맞는 숫자가 무엇이고 어느 수가 스트라이크일지를 생각해봅니다. 1이 스트라이크라면 2 또는 3이 볼이 되고 따라서 13* 혹은 1*2의 경우가 됩니다. 13*의 경우 789가 1b이므로 139는 될 수 없으므로 137 또는 138 중 하나겠지요. 이렇게 후보군을 추려보면 다음과 같은 경우의 수가 나옵니다.
1이 스트라이크인 경우
-2가 볼인 경우 : 172, 192
-3이 볼인 경우 : 137, 138
2가 스트라이크인 경우
-1이 볼인 경우 : 821, 921
-3이 볼인 경우 : 327, 328
3이 스트라이크인 경우
-1이 볼인 경우 : 813, 913
-2가 볼인 경우 : 273, 293
즉, 총 12개의 정답 후보가 나옵니다. 이 중에 하나를 시도해볼 경우 답을 추리하기 더 쉬워집니다.
(3) 이 경우는 최악의 경우이므로, 폭투를 노리고 임의의 숫자 하나(예를 들어 135)를 더 시도해보시는 것이 좋겠습니다. 이렇게 해서 2개 이상이 맞는 숫자를 찾거나, 폭투가 되는 숫자를 찾은 후 (1)또는 (2)처럼 시도하면 됩니다.
(4) 이 경우는 정답에 0이 포함되어있다는 얘기가 되고, 123, 456, 789 셋 중 하나는 폭투가 되었을 겁니다. 예를 들어 123, 456이 각각 1b가 나오고, 789가 폭투가 나왔다고 하면, 0이 반드시 포함되게 됩니다. 0이 어디냐에 따라서 다음과 같은 경우의 수가 있을 수 있습니다.
*0이 100의 자리에 있을 경우:
-0ab에서 a에는 1,3,4,6이 올 수 있고, b에는 1,2,4,5가 올 수 있습니다. 총 가지수는 2*3+2*4=14가지입니다.
*0이 10의 자리에 있을 경우:
-a0b에서 a에는 2,3,5,6이 올 수 있고, b에는 1,2,4,5가 올 수 있습니다. 총 가지수는 14가지입니다.
*0이 1의 자리에 있을 경우:
-ab0에서 a에는 2,3,5,6이 올 수 있고, b에는 1,3,4,6가 올 수 있습니다. 총 가지수는 14가지입니다.
따라서 최종 가지수는 42가지입니다. 위의 3가지 중에서 하나를 입력한 후 이것을 힌트로 가지수를 줄여나가면 됩니다.
위의 경우의 수를 따지는 것은 굉장히 머리아픈 일입니다. 기본적으로 123, 456, 789를 입력한 결과를 얻은 후에는, 경우의 수를 따지기 위해서 입력하려는 숫자가 여태 나왔던 힌트와 맞는지를 하나하나 따져봅시다.
(예) 123 : 1s 1b, 456: 폭투, 789: 1b, 913: 2b, 327 : 1s 1b
-여기서 192를 입력하고자 할 경우, 327이 1s 1b가 아닌 2b가 나왔어야 하므로 192는 답이 될 수 없습니다. 따라서 다른 숫자를 입력해야 합니다.
-여기서 821를 입력하고자 할 경우, 913이 2b가 아닌 1b로 나왔어야 하므로 821은 답이 될 수 없습니다. 따라서 다른 숫자를 입력해야 합니다.
이런식으로 정답이 되지 않는 숫자를 제외해가면서 숫자를 입력하시면 결국 답을 얻으실 수 있으리라 봅니다.
다소 머리아프게 설명했는데요. 사소한 보상이나마 얻으시는데 참고기 되길 바랍니다.