title: "[프로그래머스] 혼자서 하는 틱택토 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/160585"
description: "프로그래머스 Level 2 문제 [혼자서 하는 틱택토]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

def won(board, t):
    # 가로줄 판단.
    for row in board:
        if row == [t, t, t]:
            return True
        
    # 세로줄 판단.
    for col in range(3):
        if [board[row][col] for row in range(3)] == [t, t, t]:
            return True
        
    # 대각선 판단.
    if [board[0][0], board[1][1], board[2][2]] == [t, t, t]:
        return True
    if [board[2][0], board[1][1], board[0][2]] == [t, t, t]:
        return True
    
    return False
        
def solution(board):
    board = [list(row) for row in board]
    
    # O의 개수가 X의 개수보다 같거나 1 많아야 함.
    o_count, x_count = 0, 0
    for row in board:
        for c in row:
            if c == 'O':
                o_count += 1
            if c == 'X':
                x_count += 1

    if not (o_count == x_count or o_count == x_count + 1):
        return 0

    # O 혹은 X만 승리조건을 만족해야 함.
    if won(board, 'O') and won(board, 'X'):
        return 0
    
    # O가 승리했다면 o_count == x_count + 1이어야 함.
    if won(board, 'O') and o_count != x_count + 1:
        return 0
    
    # X가 승리했다면 o_count == x_count 여야 함.
    if won(board, 'X') and o_count != x_count:
        return 0

    return 1

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges