후기

내용

이번 문제에서는 틱택토의 진행 순서를 직접 재현하기보다, 현재 주어진 판의 상태만 보고 정상적으로 만들어질 수 있는 판인지 판단하고자 했었다.

내 풀이의 근본적인 방향은 다음 두 가지 정보를 구하는 것이었다.

첫 번째는 판에 놓인 돌의 개수였다.

틱택토는 O가 먼저 놓고 이후 X, O, X 순서로 번갈아 놓는다. 따라서 정상적인 판에서는 반드시 다음 두 경우 중 하나만 가능하다.

O의 개수 === X의 개수

또는

O의 개수 === X의 개수 + 1

두 번째는 O와 X가 각각 가로, 세로, 대각선으로 세 칸을 완성했는지를 확인하는 것이었다.

즉, 내가 세운 풀이는 다음과 같은 구조였다.

돌의 개수로 마지막 차례를 판단한다.
→ O와 X의 완성된 줄을 확인한다.
→ 마지막으로 둔 사람과 승리한 사람이 일치하는지 판단한다.

이를 위해 chk_dot_number 함수에서는 빈칸이 아닌 칸의 전체 개수를 구했고, count_oh 함수에서는 O와 X 각각의 개수를 구했었다.

chk_3line 함수에서는 가로 3줄, 세로 3줄, 대각선 2줄을 확인하려고 했었다.

모든 칸에서 모든 방향을 검사하기보다는 줄이 시작되는 위치를 기준으로 검사했다.

[0, 0]에서는 첫 번째 가로줄, 첫 번째 세로줄, 왼쪽 위에서 오른쪽 아래로 내려가는 대각선을 검사했다.

[2, 0]에서는 마지막 가로줄과 왼쪽 아래에서 오른쪽 위로 올라가는 대각선을 검사했다.

첫 번째 행의 나머지 위치에서는 세로줄을 검사하고, 첫 번째 열의 나머지 위치에서는 가로줄을 검사했다.

다만 이렇게 좌표별로 역할을 나누면서 여러 오류가 발생했었다.

처음에는 chk_3line 함수 안의 [0, 0] 조건문이 실행되지 않는다고 생각했었다.