kakasoo

[수학] 돌 게임 (백준 9655번) 본문

프로그래밍/알고리즘 풀이

[수학] 돌 게임 (백준 9655번)

카카수(kakasoo) 2020. 3. 3. 23:41
반응형

갑자기 옛날 생각이 난다.

 

예전에 중학생 때, 교무실 앞에서 울고 있는 한 남자 아이가 있었다.

처음 보는 친구였지만, 그 친구가 우는 모습에 다가가서 무슨 일이냐고 물어봤다.

(그 때도 새삼 내가 착했다는 게 느껴진다, 나는 앞으로도 착하게 살고 싶다.)

"시험을 망했어."

그 친구가 얼마나 망했는지 몰라도, 이렇게 우는 걸 보니 노력에 결과가 따라오지 못한 듯 하였다.

당시 전교 17등이었던 내가, 그 아이를 위로하는 게 가증스러운 짓은 아닐까 염려되었지만,

나는 "너무 그러지마, 다음 번엔 더 잘 할 수 있을 거야." 라고, 조심스레 말을 골라냈다.

"몇 등이길래 그래?"

"2등."

"뭐?"

그렇다.

이 친구는, 전교 1등을 처음으로 놓친 탓에 울고 있던 거였다.

 

이 일로 면식이 생긴 나는 이 친구와 등산을 한 적이 있었는데,

산만 묵묵히 올라가는 게 심심해서 했던 것이 바로 이 돌 게임이었다.

(이야기 참 돌려서 한다.)

그 때 이 친구와 내가, 서로 더 많이 이기기 위해 이 게임의 필승 공식을 만들었는데... (아련)

 

 

근데 많이 틀렸다.

돌로 찍어버리고 싶다.

(죄 없는 자가 먼저 돌로 찍(?)어라. / "그럼 예수님이 집행하시면 되겠네요")

나는 완전히 이 문제가 베스킨**스 게임이라고 생각했는데,

돌을 1~3개 가져갈 수 있는 게 아니라 무조건 1개 아니면 3개만 가져갈 수 있다는 문제였다.

2개는 가져갈 수 없다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
// 후공이 이기는 경우를 생각하는 게 더 쉽기 때문에, 후공을 구한 후 역을 생각해보자.
 
int main(void)
{
    int num;
    cin >> num;
 
    if (num % 2 == 1cout << "SK";
    else
        cout << "CY";
}
 
// 돌이 1개면 후공이 질 수밖에 없다.
// 돌이 2개면 선공이 1개 가져갈 테니 후공이 질 수밖에 없다.
// 돌이 3개면 선공이 1개, 후공이 1개 가져갈 테니 질 수밖에 없다.
// 돌이 4개면 선공이 3개 가져갈 테니 후공이 질 수 밖에 없다.
// 돌이 4개면 선공이 1개, 후공이 1개, 선공이 1개 가져갈 테니 후공이 질 수밖에 없다.
 
// 고로 4나 5부터는 위의 경우의 수를 조합해서 이루어질 뿐이다.
//  선 후 선 후 선 후 선 후... 이기는 경우의 수가 홀짝으로 나온다.
반응형