샷 더 박스 I

면접 대비

시간 제한1초메모리 제한128 MB

요약
목표 합과 오름차순으로 정렬된 열린 카드 값들이 주어질 때, 합이 목표가 되는 부분집합 중 정렬했을 때 사전순으로 가장 큰 것을 고른다.
난이도

보통10점 중 4점

유형
백트래킹, 배열, 정렬, 완전 탐색
정답자
아직 제출이 없습니다

문제

컬렉터를 쫓던 어벤져스는 은하를 가로지르는 긴 여정에 올랐고, 우주선 안에서 시간을 보낼 방법을 찾고 있다. 그러다 예전 뱃사람들 사이에서 인기 있던 샷 더 박스(Shut the Box) 라는 오래된 게임을 발견한다.

각 플레이어는 11부터 99까지 번호가 적힌 카드 9장을 숫자가 보이도록 앞면으로 펼쳐 놓고 시작하며, 더 이상 움직일 수 없을 때까지 게임을 진행한다.

게임은 주사위 두 개로 진행하되, 펼쳐진(앞면인) 카드의 합이 66 이하이면 주사위를 하나만 사용한다는 규칙이 있다. 처음에는 모든 카드가 앞면이다. 플레이어가 주사위를 굴려 나온 합을 mm이라 하자. 플레이어는 앞면인 카드 중 값의 합이 정확히 mm인 집합을 하나 골라 뒤집어(닫아) 놓는다.

예를 들어 첫 턴에 66과 22가 나와 합이 88이면, 카드 88 하나를 닫거나, 카드 11과 77을, 또는 22와 66을, 또는 세 장 1,2,51, 2, 5를 닫을 수 있다. 또 다른 예로 앞면인 카드가 1,2,61, 2, 6인데 44가 나오면 합이 44가 되는 카드 집합이 없으므로 아무 카드도 닫을 수 없고 턴이 끝난다.

최종 점수는 여전히 앞면으로 남아 있는 카드들의 합이며, 목표는 이 점수를 최대한 낮추는 것이다(가장 이상적으로는 "상자를 닫아" 남은 앞면 카드를 하나도 남기지 않는 것). 위에서 1,2,61, 2, 6이 앞면으로 남은 채 끝났다면 최종 점수는 1+2+6=91 + 2 + 6 = 9이다.

샷 더 박스 게임 예시

그림 1: 두 가지 경우에 대한 샷 더 박스 게임 예시(오른쪽 예시는 마지막 몇 수만 보여 준다). 펼쳐진 카드의 합이 66 이하일 때는 주사위를 하나만 사용한다(오른쪽 예시).

배너 박사(헐크)는 다음 전략을 따른다. 이번에 나온 주사위 합에 대해 닫을 수 있는 모든 유효한 카드 집합을 생각한다.

  • 유효한 집합이 하나뿐이면 그것을 택한다.
  • 여러 개라면 가장 작은 카드 값이 가장 큰 집합을 택한다. 예를 들어 {1,7}\{1, 7\}과 {2,6}\{2, 6\} 중에서는 {2,6}\{2, 6\}을 택한다.
  • 가장 작은 값이 같아 여전히 여러 개라면, 두 번째로 작은 값이 가장 큰 집합을 택한다. 예를 들어 {2,4,6}\{2, 4, 6\}과 {2,3,7}\{2, 3, 7\} 중에서는 {2,4,6}\{2, 4, 6\}을 택한다.

일반적으로, 유효한 집합들 중 카드 값을 오름차순으로 나열한 수열이 사전순으로 가장 큰 것을 택한다.

배너 박사를 대신해 이 선택을 해 주는 프로그램을 작성하라(헐크를 화나게 하면 어떻게 되는지 알 것이다).

입력

첫 번째 줄에는 테스트 케이스의 수 TT가 주어진다(T<100T < 100).

이어지는 TT개의 줄은 각각 하나의 테스트 케이스를 나타낸다. 각 줄은 주사위로 나온 합(target)으로 시작하고, 그 뒤에 앞면인 카드의 개수 nn, 그리고 앞면인 카드 nn개의 값이 오름차순으로 이어진다.

출력

각 테스트 케이스마다 한 줄을 출력한다.

유효한 수가 하나라도 있으면 위 전략에 따른 최선의 수를 다음 형식으로 정확히 출력한다.

The best move is: c1 c2 ... ck

여기서 c1,c2,…,ckc_1, c_2, \dots, c_k는 선택한 카드 값을 오름차순으로 나열한 것이며, 하나의 공백으로 구분한다.

앞면인 카드의 어떤 집합도 합이 target이 되지 않으면 다음을 정확히 출력한다.

No move found.

예제3

  1. 예제 1

    입력
    5
    10 9 1 2 3 4 5 6 7 8 9
    12 9 1 2 3 4 5 6 7 8 9
    7 6 1 2 3 4 8 9
    8 7 1 2 3 4 5 6 7 
    8 4 1 2 3 9
    
    예상 출력
    The best move is: 4 6
    The best move is: 5 7
    The best move is: 3 4
    The best move is: 3 5
    No move found.
    
  2. 예제 2

    입력
    1
    5 3 3 5 7
    
    예상 출력
    The best move is: 5
    
  3. 예제 3

    입력
    1
    6 6 1 2 3 4 5 6
    
    예상 출력
    The best move is: 6