chyam

[프로그래머스 Lv2, python] - 혼자서 하는 틱택토 본문

프로그래머스/LV2

[프로그래머스 Lv2, python] - 혼자서 하는 틱택토

chyam_eun 2025. 5. 2. 14:01

https://school.programmers.co.kr/learn/courses/30/lessons/160585

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def is_winner(board, player):
    # 가로 승리
    for i in range(0, 9, 3):
        if board[i] == board[i+1] == board[i+2] == player:
            return True
    # 세로 승리
    for i in range(3):
        if board[i] == board[i+3] == board[i+6] == player:
            return True
    # 대각선 승리
    if board[0] == board[4] == board[8] == player:
        return True
    if board[2] == board[4] == board[6] == player:
        return True
    return False

def solution(board):
    new = "".join(board)
    o_count = new.count("O")
    x_count = new.count("X")
    
    # 기본 규칙 위반: 선공은 O
    if x_count > o_count or o_count > x_count + 1:
        return 0

    o_win = is_winner(new, "O")
    x_win = is_winner(new, "X")

    # O와 X가 동시에 이김 = 잘못된 판
    if o_win and x_win:
        return 0
    # O가 이겼으면 O는 X보다 1 많아야 함
    if o_win and o_count != x_count + 1:
        return 0
    # X가 이겼으면 O와 X는 같아야 함
    if x_win and o_count != x_count:
        return 0

    return 1