| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 | 1024 MB | 840 | 378 | 324 | 45.442% |
이 문제는 인터랙티브 문제이다.
지문을 쓰기 시작한 12월 22일은 dbrua1222의 생일이다! 아무도 자신의 생일을 몰라 슬퍼진 dbrua1222는, 인터랙터에게 오늘 생일인 사람의 이름을 $1$개 알려주었다. 하지만 이 인터랙터는 결함이 있어 최대 한 번, 오늘이 생일인 사람을 오늘이 생일이 아니라고 거짓말할 수 있다.
이제 인터랙터로부터 오늘 생일인 사람이 누구인지 알아내 보자!
당신의 프로그램은 아래의 과정을 통해 표준 입출력으로 인터랙터와 상호작용해야 한다.
첫 번째 줄에는 사람들의 수 $N(1 \le N \le 500)$이 주어진다.
두 번째 줄부터 $N+1$번째 줄까지 사람들의 이름이 $100$글자 이내로 주어진다. 이름은 영어 소문자와 숫자, 그리고 _로 이루어져 있다. 이름은 중복되어 주어지지 않는다. $N+1$번째 줄까지 입력을 받아야 함에 유의하라.
다음을 표준 출력 스트림(stdout)으로 한 줄에 출력하여, 인터랙터에게 특정 사람의 생일이 오늘인지 질문할 수 있다.
? $x$: $x$에는 입력으로 주어진 사람들의 이름 중 하나를 적는다. 질문을 한 뒤, 당신은 인터랙터에게서 숫자 하나를 입력받아 질문의 답을 알 수 있다. 질문의 대상이 된 사람의 생일이 오늘일 경우 $1$을 입력받고, 아닐 경우 $0$을 받게 된다. 인터랙터가 최대 한 번 거짓말할 수 있음에 유의하라.
생일인 사람이 누군지 질문하는 건 최대 $1\,000$번까지만 가능하다.
만약 생일인 사람이 누군지 알아냈을 경우, 표준 출력 스트림으로 다음 한 줄을 출력한다.
! $y$ : $y$에 오늘 생일인 사람의 이름을 넣어 생일을 축하한다.
이 문제의 인터랙터는 미리 생일인 사람을 $1$명 정해놓고 인터랙션을 하는 적응하지 않는 채점기를 사용한다. 질문을 한 후에는 반드시 개행 후 표준 출력 버퍼를 flush해야 하고, 표준 입력 스트림(stdin)을 통해 질문에 대한 답을 입력받아야 한다. 리스트에 없는 사람의 이름을 질문하거나 문제의 조건을 지키지 않거나 $1\,000$번 초과 질문할 경우 예상치 못한 채점 결과를 받을 수 있다.
답을 출력한 이후에는 표준 출력 버퍼를 flush하고 프로그램을 바로 종료하여야 한다. 그렇지 않으면 예상하지 못한 채점 결과를 받을 수 있다.
각 언어별로 표준 출력 버퍼를 flush하는 방법은 다음과 같다.
fflush(stdout)std::cout << std::flushSystem.out.flush()sys.stdout.flush()(print를 쓸 경우, 인자에 flush=True를 추가적으로 입력)2 toycartoon dbrua1222 0 0 1
? toycartoon ? dbrua1222 ? dbrua1222 ! dbrua1222
두 번째 질문에서 인터랙터가 거짓말을 하였다.
예제의 입출력은 입출력이 어떤 방식으로 이루어지는지 이해를 돕기 위해 의도적으로 개행 간격 등을 조절한 것으로, 실제 입출력과는 다르다.
Contest > BOJ User Contest > 카툰컵 > 카툰컵 Zero: ~Prologue~ C번