가위 가위 가위
시간 제한2초메모리 제한1024 MB
100개의 숨은 손 모양에 대해 이긴 횟수만 알려주는 대결을 최대 101번 진행해 숨은 문자열을 알아낸다.
문제
세종이는 가위바위보 머신을 개발했다. 머신을 작동시키면 머신 가위바위보 대결을 즐길 수 있다. 한 번의 대결은 총 번의 가위바위보 게임으로 이루어지며, 각 게임의 결과는 플레이어에게 공개되지 않는다. 대신 번의 가위바위보 게임을 모두 진행한 후 플레이어는 번의 게임 중 이긴 게임의 수를 알 수 있다.
가위바위보의 꽃은 무작위성이지만, 난수 생성 알고리즘을 믿지 못하는 세종이는 아예 머신이 낼 손 모양의 순서를 모두 고정해 버렸다. 이를 본 영재는 세종이와 다음과 같은 내기를 하기로 했다.
- 영재와 머신이 대결한다. 처음에 영재는 반드시 개의 가위를 낸다.
- 매 대결이 끝날 때마다, 영재는 자신이 이긴 게임의 수를 확인한다. 그 뒤 영재는 낼 손 모양을 원하는 대로 바꾸고 다음 게임을 진행한다.
- 영재는 첫 대결을 포함해 총 번의 대결을 할 수 있다.
- 대결 결과를 통해 영재가 머신의 손 모양이 무엇인지 맞히면 영재가, 맞히지 못하면 세종이가 내기에서 이긴다.
영재가 내기에서 이길 수 있게 도와주자!
입력
첫째 줄에 영재가 머신과의 첫 대결에서 이긴 게임의 수를 나타내는 정수 가 주어진다.
출력
다음을 표준 출력 스트림(stdout)으로 한 줄에 출력해 머신과의 대결을 진행할 수 있다.
? hand: 영재의 손 모양을hand로 바꾸고 다음 대결을 진행한다.hand는0,2,5로만 이루어진 자 길이의 문자열이어야 한다.hand의 번째 글자는 영재가 다음 대결의 번째 게임에서 낼 손 모양을 의미하며,0은 바위,2는 가위,5는 보를 의미한다.
출력한 후에는 반드시 표준 출력 버퍼를 비워야 한다. 출력 버퍼를 비우지 않는 경우 예상 밖의 결과를 얻을 수 있음에 유의하라.
대결의 결과는 영재가 이긴 게임의 수를 의미하는 하나의 정수로 주어진다. 만약 머신의 손 모양을 알아낸 경우, ! machine_hand를 출력하고 프로그램을 종료할 수 있다. machine_hand는 머신의 손 모양을 뜻하는 문자열로, 0, 2, 5로만 이루어진 자 길이의 문자열이어야 한다. machine_hand의 번째 글자는 머신이 한 대결의 번째 게임에서 내는 손 모양을 의미하며, 0은 바위, 2는 가위, 5는 보를 의미한다.
채점 프로그램은 machine_hand와 실제 머신이 내는 손 모양이 모두 일치할 때 이를 정답으로 처리한다. 만약 머신과의 대결 횟수가 번을 초과하거나, 출력 형식을 지키지 않거나, machine_hand와 실제 머신이 내는 손 모양이 다른 경우 이를 오답으로 처리한다.
그레이더는 비적응적(non-adaptive)으로, 처음에 정한 손 모양을 상황에 따라 바꾸지 않는다.
힌트
언어별로 표준 출력 버퍼를 비우는 방법은 다음과 같다.
- C:
fflush(stdout) - C++:
std::cout << std::flush - Java:
System.out.flush() - Python:
sys.stdout.flush()