만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

1인용 신경쇠약

면접 대비

시간 제한2초메모리 제한1024 MB

요약
H×W 격자의 같은 번호 카드 쌍을 모두 없애는 데 필요한 턴 수를 구합니다. 홀수 행은 왼쪽부터, 짝수 행은 오른쪽부터 카드를 뒤집고 본 카드를 기억합니다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

카드가 HWHW장 있다. 여기서 HWHW는 짝수이다. 각 카드의 앞면에는 11부터 HW/2HW/2까지의 수 중 하나가 적혀 있으며, 같은 수가 적힌 카드는 정확히 두 장이다. 이 카드로 어떤 카드 게임을 할 수 있을지 생각하다가 1인용 신경쇠약을 하기로 했다.

1인용 신경쇠약에서는 먼저 HWHW장의 카드를 뒷면이 보이도록 H×WH \times W 직사각형 판에 늘어놓는다. 목표는 턴을 반복하여 판에서 모든 카드를 제거하는 것이다. 각 턴에서는 반드시 카드 두 장을 뒤집어야 한다. 뒤집은 두 카드의 앞면 수가 같으면 그 두 장을 판에서 제거한다. 다르면 두 카드를 다시 뒤집어 뒷면이 보이게 한다. 다만 기억력이 완벽하여, 한 번 뒤집은 카드의 수와 놓인 위치는 모두 기억한다. 따라서 각 턴마다 다음과 같이 행동한다.

  1. 두 번째 이후 턴이고, 이전 턴들을 통해 같은 수가 적힌 카드 두 장의 위치를 이미 알고 있다면, 그 두 장을 뒤집어 판에서 제거한다.
  2. 그렇지 않으면, 아직 뒤집지 않은 카드 중 우선순위가 가장 높은 카드를 한 장 뒤집는다(카드의 우선순위는 뒤에서 정의한다). 이 카드의 수를 이미 뒤집혀 있는 다른 카드에서 본 적이 있다면, 다른 카드를 뒤집어 두 장을 판에서 제거한다.
  3. 그렇지 않으면, 아직 뒤집지 않은 카드 중 우선순위가 가장 높은 카드를 한 장 더 뒤집는다. 이번 턴에 처음 뒤집은 두 카드의 수가 (운 좋게) 같으면 두 장을 판에서 제거한다.
  4. 그렇지 않으면, 뒤집은 두 카드를 뒷면이 보이게 하여 다음 턴을 준비한다.

행은 위에서부터 11번부터 HH번까지 번호를 붙인다. 남은 카드 중 가장 위쪽 행에 있는 카드가 우선순위가 가장 높다. 가장 위쪽 행에 카드가 여럿 있으면, 그 행의 원래 번호가 홀수 행이면 가장 왼쪽 카드가, 원래 번호가 짝수 행이면 가장 오른쪽 카드가 우선순위가 가장 높다.

게임을 끝낸 뒤, 모든 카드를 제거하는 데 턴을 몇 번 썼는지 세지 않았다는 것을 깨달았다. 다행히 카드의 초기 배치는 기억하고 있다. 그래서 주어진 초기 배치에 대해 모든 카드를 제거하는 데 걸리는 턴 수를 계산하는 프로그램을 작성하기로 했다.

입력

첫 번째 줄에 두 정수 HH(1≤H≤1001 \le H \le 100)와 WW(1≤W≤1001 \le W \le 100)가 주어진다. H×WH \times W는 짝수라고 가정해도 된다. 이어지는 HH개의 줄에는 각각 정확히 WW개의 정수가 있다. ii번째 줄의 jj번째 정수는 위에서 ii번째, 왼쪽에서 jj번째 카드의 앞면 수를 나타낸다. HH개 줄의 모든 정수는 11 이상 HW/2HW/2 이하이며, 같은 정수는 정확히 두 번 나타난다고 가정해도 된다.

출력

모든 카드를 제거하는 데 걸린 턴 수를 나타내는 정수 하나를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    2 6
    5 5 1 4 4 1
    6 2 3 2 3 6
    
    예상 출력
    9
    
  2. 예제 2

    입력
    4 3
    1 1 2
    3 3 2
    4 4 5
    6 6 5
    
    예상 출력
    6
    
  3. 예제 3

    입력
    1 10
    1 2 3 4 5 5 4 3 2 1
    
    예상 출력
    7