JasonScript

Jason's Research Blog

Development/Algorithm

< 알고리즘 문제 풀이 > 혼자서 하는 틱택토

jason.bak 2023. 12. 5. 20:22

문제 링크 > 코딩테스트 연습 - 혼자서 하는 틱택토 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

솔루션 >

def check(board, m):
        # 가로
        for r in board:
            if r == [m, m, m]:
                return True
        # 세로
        for c in range(3):
            if [board[0][c], board[1][c], board[2][c]] == [m, m, m]:
                return True
        # 대각선
        if [board[0][0], board[1][1], board[2][2]] == [m, m, m]:
            return True
        if [board[2][0], board[1][1], board[0][2]] == [m, m, m]:
            return True

def solution(board):
    board = [list(row) for row in board]
    o_cnt = sum(r.count('O') for r in board)
    x_cnt = sum(r.count('X') for r in board)

    if not (x_cnt == o_cnt):
        return 0
    
    # O and X 둘 다 승리
    if check(board, 'O') and check(board, 'X'):
        return 0
    
    # O가 승리
    if check(board, 'O') and o_cnt != x_cnt + 1:
        return 0
    
    # X가 승리
    if check(board, 'X') and o_cnt != x_cnt:
        return 0
    
    return 1