bong-u/til

프로그래머스 - 혼자서 하는 틱택토 (L2)

수정일 : 2023-07-13

 1V = [[(-1, 0), (1, 0)], [(0, -1), (0, 1)], [(-1, -1), (1, 1)], [(-1, 1), (1, -1)]]
 2P = [[(1, 0), (1, 1), (1, 2)], [(0, 1), (1, 1), (2, 1)], [(1, 1)], [(1, 1)]]
 3
 4def solution(board):
 5    answer = -1
 6    o_line = 0
 7    x_line = 0
 8
 9    for i, p_list in enumerate(P):
10        for p in p_list:
11            if board[p[0]][p[1]] != '.' and board[p[0]][p[1]]== board[p[0]+V[i][0][0]][p[1]+V[i][0][1]] == board[p[0]+V[i][1][0]][p[1]+V[i][1][1]]:
12                if board[p[0]][p[1]] == 'O':
13                    o_line += 1
14                elif board[p[0]][p[1]] == 'X':
15                    x_line += 1
16
17    o_cnt = 0
18    x_cnt = 0
19
20
21    for i in ''.join(board):
22        if i == 'O':
23            o_cnt += 1
24        elif i == 'X':
25            x_cnt += 1
26
27    if not (0 <= o_cnt - x_cnt <= 1):
28        return 0
29    if o_line == 1:
30        if o_cnt - x_cnt != 1:
31            return 0
32    if x_line == 1:
33        if o_cnt != x_cnt:
34            return 0
35    if o_line != 0 and o_line == x_line:
36        return 0
37
38    return 1

문제

  • 틱택토 3X3 보드판이 주어진다. (‘O’, ‘X’, ‘.')
  • 규칙을 지켜서 나올수 있는 보드인지 여부를 출력하여라
  • TC
    • input

      [“O.X”, “.O.”, “..X”]

    • ouput

      1

해결방법

  • O의 줄 수, X의 줄 수, O의 개수, X의 개수를 구했다
  • 특히, 누가 이겼는지에 따라서 조건을 따져야한다
    • 예) O가 이긴 경우 -> O의 개수 = X의 개수 + 1