마술 트릭
면접 대비시간 제한1초메모리 제한128 MB
보여준 순서대로 주어진 네 장의 카드에서 첫 카드의 무늬와 나머지 세 장의 순열을 이용해 숨겨진 다섯 번째 카드를 알아낸다.
문제
한 마술사가 새로운 카드 마술을 고안하여 권위 있는 마술사 학회에서 선보였고, 그 자리에서 "최고 마술상"을 받았다. 이 마술에는 마술사, 관객, 조수 세 사람이 필요하다.
관객은 표준 52장 카드 한 벌을 섞은 뒤 무작위로 5장을 뽑는다. 이 5장은 조수에게 건네지며, 마술사는 카드를 보지 못한다. 조수는 카드를 살펴본 뒤 다섯 장 중 네 장을 한 장씩 마술사에게 보여 준다. 네 장을 본 마술사는 숨겨진 다섯 번째 카드를 맞힌다.
이 마술이 성립하는 이유는, 어떤 5장이 주어져도 조수가 그중 4장을 골라 보여 주는 순서로 숨긴 카드를 부호화할 수 있기 때문이다. 부호화는 카드에 대한 고정된 전순서를 이용하며, 먼저 무늬로, 그다음 숫자로 정렬한다.
- 무늬 순서: (하트, 클럽, 다이아몬드, 스페이드).
- 숫자 순서: . 여기서 , , , 는 각각 10, 잭, 퀸, 킹을 뜻한다. (에이스는 로 표기한다.)
각 카드는 숫자 뒤에 무늬 문자를 붙인 두 글자로 나타낸다. 예를 들어 QH(하트 퀸), 1C(클럽 에이스)와 같다.
예를 들어 관객이 JD, 8S, 7H, 8C, QH를 뽑았다고 하자. 조수의 전략은 다음과 같다.
- 다섯 장 중 두 번 이상 나타나는 무늬 를 찾는다(이 예에서는 하트). 두 번 이상 나타나는 무늬가 여러 개이면 무늬 순서가 가장 낮은 것을 고른다.
- 무늬가 인 카드들 중에서, 순환 숫자 순서 에서 같은 무늬의 다른 카드 보다 여섯 칸 이내로 앞선 카드 를 숨긴다. 한 무늬에는 숫자가 13개뿐이므로 이는 항상 가능하다(이 예에서는 QH를 숨긴다). 조건을 만족하는 카드 가 여러 개이면 숫자가 가장 작은 것을 고른다.
- 먼저 를 마술사에게 보여 준다. 그러면 마술사는 숨긴 카드의 무늬를 알고, 그 숫자가 보다 여섯 칸 이내로 앞서 있음을 안다.
- 남은 세 장으로 1부터 6까지의 정확한 간격을 부호화한다. 세 장을 으로 정렬했을 때, 보여 주는 순서의 의미는 다음과 같다.
- 은 1을 뜻한다
- 는 2를 뜻한다
- 은 3을 뜻한다
- 은 4를 뜻한다
- 는 5를 뜻한다
- 은 6을 뜻한다
마술사는 이 수를 의 숫자에 더하여(킹 다음에는 다시 로 순환) 숨긴 카드의 숫자를 얻는다. 숨긴 카드의 무늬는 와 같다.
조수가 보여 준 순서대로 네 장의 카드가 주어질 때(따라서 첫 번째 카드가 이다), 숨긴 카드를 알아내는 프로그램을 작성하라.
입력
첫째 줄에 테스트 케이스의 수 이 주어진다 (). 이어지는 개의 줄에 각각 하나의 테스트 케이스가 주어지며, 조수가 보여 준 순서대로 네 장의 카드가 공백 하나로 구분되어 주어진다(따라서 첫 번째 카드가 이다).
출력
각 테스트 케이스마다 숨긴 카드를 한 줄에 출력한다.