아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

메모리 매치

시간 제한8초메모리 제한512 MB

요약
이미 본 카드의 위치와 숫자를 모두 기억하는 상태에서 메모리 게임을 최적으로 플레이할 때 발생하는 불일치 횟수의 기댓값을 구한다.
난이도

어려움10점 중 8점

유형
확률, 동적 계획법, 수학, 게임 이론
정답자
아직 제출이 없습니다

문제

메모리 매치는 2M장의 카드를 사용하는 혼자 하는 게임이다. 각 카드의 앞면에는 1부터 M까지의 수가 하나씩 적혀 있다. 각 수 i (1 ≤ i ≤ M)에 대해, 수 i가 적힌 카드가 정확히 두 장 있다. 게임이 시작될 때 모든 카드는 섞여서 뒷면이 보이도록 탁자 위에 놓인다. 각 턴에서 두 장의 카드를 골라 앞면이 보이도록 뒤집는다. 두 카드에 적힌 수가 같으면 그 카드들은 탁자에서 제거된다. 그렇지 않으면 다시 뒷면이 보이도록 뒤집힌다(이를 미스매치라 한다). 카드를 고를 때 두 장을 동시에 뒤집을 필요는 없고, 첫 번째 카드의 수를 본 뒤에 두 번째 카드를 고를 수 있다. 게임의 목표는 최대한 적은 미스매치로 모든 카드를 제거하는 것이다.

Royce A. Mitchell은 기억력이 비범해서, 지금까지 앞면이 보이도록 뒤집은 카드의 위치와 수를 모두 기억한다. 그가 게임을 최적으로 플레이할 때 평균적으로 발생하는 미스매치 횟수의 기댓값을 계산하는 프로그램을 작성하시오.

입력

입력은 여러 데이터셋으로 이루어진다.

각 데이터셋은 카드의 수를 나타내는 짝수 N (2 ≤ N ≤ 1000) 하나로 구성된다.

입력의 끝은 0 하나만 있는 줄로 표시된다. 이 줄은 입력의 일부가 아니며 데이터셋으로 취급해서는 안 된다.

출력

각 데이터셋에 대해 미스매치 횟수의 기댓값을 출력한다. 오차가 10-6 이내라면 출력값의 소수 자릿수는 얼마든지 좋다.

예제1

  1. 예제 1

    입력
    2
    4
    6
    8
    10
    52
    0
    
    예상 출력
    0.0000000000
    0.6666666667
    1.3333333333
    1.9238095238
    2.5523809524
    15.4435236099