오델로

면접 대비

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

요약
세 가지 초기 배치 중 하나로 시작해 8x8 오델로 보드에서 최대 30번의 수를 시뮬레이션한 뒤, 마지막 흑과 백 디스크 개수를 출력한다.
난이도

보통10점 중 4점

유형
시뮬레이션, 구현, 행렬, 배열
정답자
아직 제출이 없습니다

문제

오델로(리버시라고도 함)는 8×88 \times 8 판에서 하는 게임이다. 각 칸은 행과 열로 나타내며, 맨 위 행이 1행, 맨 왼쪽 열이 1열이다. 돌은 한 면이 검은색, 다른 면이 흰색이며, 한 사람은 검은 면을, 다른 사람은 흰 면을 위로 오게 하여 돌을 놓는다.

게임은 판 위에 이미 몇 개의 돌이 놓인 상태에서 시작한다.

다음 두 조건을 모두 만족할 때 그 수는 유효하다.

  1. 돌은, 판 위에 이미 놓인 어떤 돌과 가로·세로·대각선으로 인접한 빈 칸에 놓아야 한다.
  2. 상대의 돌을 하나 이상 뒤집어야 한다. 돌을 놓은 뒤 여덟 방향(가로·세로·대각선)을 각각 바깥쪽으로 살핀다. 어떤 방향으로 상대 돌이 끊김 없이 이어지고 그 끝을 내 돌이 막고 있으면, 그 사이의 상대 돌을 모두 내 색으로 뒤집는다. 내 돌을 만나기 전에 빈 칸이나 판의 경계에 도달하면 그 방향에서는 아무것도 뒤집지 않는다.

항상 검은색이 먼저 두고, 이후 흰색·검은색·흰색 순으로 번갈아 둔다. 주어진 수들을 순서대로 시뮬레이션한 뒤, 판에 남은 검은 돌과 흰 돌의 개수를 각각 구하라.

입력

입력은 세 부분으로 이루어진다.

먼저 초기 판의 배치를 나타내는 문자 하나(a, b, c 중 하나)가 주어진다.

  • 배치 a: 오델로의 표준 시작 배치. (4,4)와 (5,5)는 흰색, (4,5)와 (5,4)는 검은색이다.
  • 배치 b: 주대각선 칸 (1,1), (2,2), …, (8,8)이 모두 검은색이고, 반대각선 칸 (1,8), (2,7), …, (8,1)이 모두 흰색이다.
  • 배치 c: 3열과 4열의 모든 칸이 검은색, 5열과 6열의 모든 칸이 흰색이다(8개 행 전부).
배치 a배치 b배치 c

다음으로 시뮬레이션할 수의 개수를 나타내는 정수 nn(0≤n≤300 \le n \le 30)이 주어진다. 이어서 nn개의 정수 쌍 RR CC(1≤R≤81 \le R \le 8, 1≤C≤81 \le C \le 8)가 순서대로 주어지며, RR은 행, CC는 열을 나타낸다.

첫 번째 수는 검은색, 두 번째 수는 흰색, 세 번째 수는 다시 검은색 순이다. 나열된 모든 수는 빈 칸에 두는 유효한 수임이 보장된다.

출력

모든 수를 둔 뒤 판 위의 검은 돌의 개수와 흰 돌의 개수를 공백 하나로 구분하여 출력한다.

예제3

  1. 예제 1

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

    입력
    b 0
    
    예상 출력
    8 8
    
  3. 예제 3

    입력
    c 3 1 7 2 2 2 1
    
    예상 출력
    22 13