혼자서 하는 틱택토

송용진·2025년 4월 6일
0

알고리즘과 자료구조

목록 보기
186/190

https://school.programmers.co.kr/learn/courses/30/lessons/160585?gad_source=1&gclid=CjwKCAjwzMi_BhACEiwAX4YZUGFoOPl6eiJg39wuJYMzbedZc4fRSdOEq8l_cLcUuQFXWoHIrGqaYBoCch4QAvD_BwE

def solution(board):
    # O와 X의 개수를 세기
    count_O = sum(row.count('O') for row in board)
    count_X = sum(row.count('X') for row in board)

    # 승리 조건을 확인하는 함수
    def check_winner(player):
        # 가로, 세로, 대각선 체크
        return any(
            all(board[i][j] == player for j in range(3)) for i in range(3)
        ) or any(
            all(board[j][i] == player for j in range(3)) for i in range(3)
        ) or all(board[i][i] == player for i in range(3)) or all(board[i][2 - i] == player for i in range(3))

    win_O = check_winner('O')
    win_X = check_winner('X')

    # 규칙 검증
    if count_O < count_X or count_O > count_X + 1:
        return 0
    if win_O and win_X:
        return 0
    if win_O and count_O != count_X + 1:
        return 0
    if win_X and count_O != count_X:
        return 0

    return 1

# 예시 테스트
print(solution(["O.X", ".O.", "..X"]))  # 1
print(solution(["OOO", "...", "XXX"]))  # 0
print(solution(["...", ".X.", "..."]))   # 0
print(solution(["...", "...", "..."]))   # 1

승리 조건 검사를 위해 별도의 함수를 정의하여 사용하기

profile
개발자

0개의 댓글