본문 바로가기
코딩테스트/Python

[python] 혼자서 하는 틱택토

by nahkim 2023. 4. 7.

📜 접근 방법

  1. O가 이길경우 -> O의 갯수가 1개 많아야함
  2. X가 이길 경우 -> X의 갯수와 O의 갯수가 같아야함
  3. 칸을 다 채우고 비길 경우 -> O의 갯수가 1개 많아야함
  4. 경기가 진행중일 경우 -> X의 갯수와 O의 갯수가 같거나 O의 갯수가 1개 많아야함

 

❌ 실패 코드

대각선 부분 코드를 잘못 짰었음

 

✅ 정답 코드

def solution(board):
    o_count = 0
    x_count = 0

    for n in board:
        o_count += n.count("O")
        x_count += n.count("X")
    
    if (o_count - x_count != 0) and (o_count - x_count != 1):
        return 0

# 가로
    x_win = 0
    o_win = 0
    for n in board:
        if n.count("O") == 3:
            o_win += 1
        if n.count("X") == 3:
            x_win += 1

# 세로
    for i in range(len(board)):
        if board[0][i] == board[1][i] == board[2][i] == "O":
            o_win += 1
        if board[0][i] == board[1][i] == board[2][i] == "X":
            x_win += 1

# 대각선
    if board[0][0] == board[1][1] == board[2][2] == 'O':
        o_win += 1
    elif board[0][0] == board[1][1] == board[2][2] == 'X':
        x_win += 1
    
    if board[0][2] == board[1][1] == board[2][0] == 'O':
        o_win += 1
    elif board[0][2] == board[1][1] == board[2][0] == 'X':
        x_win += 1
            
    # if x_win and o_win:
    #     return 0
    if o_win == 1 and o_count - x_count != 1:
        return 0
    if x_win == 1 and o_count - x_count != 0:
        return 0
    return 1

 

💡알게 된점

 

조건에 부합하는 경우를 제외시켜야 하는데 코드를 잘 못짰다.