이 문제는 인터랙티브 문제이다. 아래 노트에 나와 있는 방식으로 입출력을 진행해야 한다.
2023년 2학기, 드디어 고려대학교에 드랍(수강포기제)이 부활한다! 이번 학기를 마치고 졸업하는 사이버국방학과 재우는 원래도 DP 문제를 좋아했는데, 최근에 시즌 2가 나온 드라마 <D.P.> 시리즈를 보고 졸업 후 장교로 임관하기로 마음먹었다. 재우는 임관을 위해 최대 3개까지 수강할 수 있는 운동 과목을 수강하기로 했다. 작년에 F를 받은 “수영” 과목의 재수강은 물론, “축구”와 “볼링” 과목까지 최대로 수강하게 되었다.
드랍을 할 수 있는 날이 다가오자, 재우는 갑자기 작년에 수영을 F 받은 기억이 떠올라 PTSD가 왔다. 이에 재우는 지도 교수님께 면담을 요청했고, 재우의 정보를 보던 교수님께서는 재우가 세 과목 중 두 과목을 F를 받고 한 과목만 Pass를 받을 수 있다는 사실을 알게 되었다. 원래는 이를 알려주면 안되지만, 재우를 딱하게 생각한 교수님은 한 가지 생각을 한다. 바로 재우가 좋아하는 <D.P. 시즌 1>에서 나온 몬티홀 문제로 주기로 한 것이다!
이제 재우는 다음과 같은 과정을 통해 정보를 얻을 수 있다.
Pass로 예상되는 과목 하나를 교수님께 말씀드린다.재우는 이 정보를 통해 두 과목을 드랍하고, 남은 한 과목을 수강하기로 하였다. 재우는 남은 한 과목이 Pass 받기를 원한다. 재우가 되어 그 과목을 찾아보자.
총 1,500개의 독립적인 평행 세계가 존재해 각 평행 세계의 재우는 위의 결정을 해야 한다. 각각의 평행 세계에 대해 프로그램 시작 시 재우가 Pass를 받을 과목 하나가 독립적으로 31의 확률로 결정된다.
각 평행 세계에 대해 위의 1번과 2번 과정은 모두 다른 세계와 독립적으로 진행된다.
아래 인터랙티브 과정을 거쳐 1,500개의 독립적인 평행 세계에 존재하는 재우 중 총 900명 이상의 최종적으로 예상한 과목이 프로그램이 정한 과목과 같아 재우가 Pass를 받았다면 정답이다. 모든 평행 세계의 행동은 독립적으로 시행된다. 만약 해당 문제의 해답을 모르겠다면, 아래 노트를 읽어보자.
프로그램이 시작되면 먼저 평행 세계의 개수 n=1,500을 입력받는다.
n개의 평행 세계에 대해 Pass로 예상되는 과목을 swimming, bowling, soccer 중 각각 하나씩 골라 한 줄에 공백으로 구분된 n개의 과목 이름을 출력한다. (이 과정 직후 flush한다)
그럼 프로그램은 각 평행 세계에 대해 고른 과목을 제외한 과목 두 개 중 F인 과목 이름을 하나씩 공백으로 구분하여 준다.
이 정보를 토대로 최종적으로 각 평행 세계에 대해 Pass로 예상되는 과목의 이름을 한 줄에 공백으로 구분하여 출력한다. (이 과정 직후 flush한다)
예제는 평행 세계가 n=4개 존재할 때의 예시이며 예제는 채점하지 않는다. 실제로 프로그램은 n=1,500개인 입력에 대해서 정확히 한 번 실행된다.
인터랙티브 문제의 경우 출력을 하고, 언어에 따라 아래와 같은 명령어를 바로 다음에 적어 출력 버퍼를 flush해 줘야 한다.
fflush(stdout);fflush(stdout); 혹은 std::cout << std::flush;System.out.flush();sys.stdout.flush()System.out.flush()남은 두 과목 중 하나를 고르게 되므로 재우가 Pass를 받을 확률이 21인데 어떻게 1,500개 중 900개나 예상할 수 있는지 의문을 가질 수 있다. <D.P. 시즌 1> 4화의 몬티홀 문제를 설명하는 허치도 병장과 관련된 다음 두 장면을 보며 그 방법을 알아보자.
장면 1(군대 내 후임과의 대화에서)
장면 2(대학교 수업 중)
X를 치고, 둘을 묶어 +기호를 그린다)따라서 선택을 바꾸면 재우가 Pass를 받을 확률이 32의 확률이 되며, 1,500개의 평행 세계 중 Pass를 받는 평행 세계의 기댓값은 1,000개다.
즉, 위의 전략처럼 처음 출력한 것과 다른 선택을 하게 되면, 평균적으로 1,500개 중 1,000개를 맞을 것을 기대할 수 있다는 의미이다.
만약 정말 운이 좋지 않아 해당 전략을 사용했음에도 900개 미만을 맞을 확률을 계산해보면, 0.00000286정도로, 이 확률은 어떤 사람이 평생 로또를 딱 한번 샀는데 1등에 당첨될 확률(약 0.0000123)보다 약 4.3배 정도 낮으므로, 혹시나 해당 전략을 사용했는데 틀렸다면 한 번 더 제출한 뒤 오늘 로또를 사도록 하자.