본문 바로가기
Coding Test/Python

[프로그래머스] 혼자서 하는 틱택토 Python 풀이

by giem 2023. 3. 9.
반응형

 


문제

틱택토는 3x3에서 하는 3목이라고 보면 된다.


구현

O와 X의 가로와 세로, 대각선 라인의 완성된 3목의 수를 각각 세어서

가능한 상황인지 판단해야 한다.


코드
def solution(board):
    strboard = ''.join(board)
    valid = strboard.count('O')-strboard.count('X')
    if valid not in [0,1]:
        return 0
    
    colboard = list(zip(*board))
    ocnt=0
    xcnt=0
    for i in range(3):
        if colboard[i].count('O')==3 or board[i].count('O')==3:
            ocnt+=1
        if colboard[i].count('X')==3 or board[i].count('X')==3:
            xcnt+=1
    
    for i in range(0,3,2):
        if (board[0][i] == board[1][1] == board[2][2-i] == 'O'):
            ocnt+=1
        if (board[0][i] == board[1][1] == board[2][2-i] == 'X'):
            xcnt+=1
    
    if ocnt and xcnt:
        return 0
    if ocnt==1 and valid==0:
        return 0
    if xcnt==1 and valid>=1:
        return 0
    
    return 1

코드는 위와 같은데 먼저 O, X를 카운트하고 두 개수가 같거나 O가 하나 더 많으면(선공) 계속 진행한다.

 

zip(*board)로 행과 열을 바꿔서 계산할 수 있도록 했다.

 

첫 반복문에서 가로와 세로의 3목 개수를 센다.

 

두 번째에서는 대각선의 개수를 센다.

 

만약 o, x 둘 다 3목이 있다면 잘못된 것이다.

o가 3목을 완성했는데 개수가 o와 x의 개수와 같다면 잘못된 것이다.

x가 3목을 완성했는데 o가 하나 더 많으면 잘못된 것이다.

 

이렇게 실행을 하면 테스트케이스에서 보통 0.01ms이고 하나만 0.02ms 정도가 나온다


다른 풀이

따로 특이한 풀이는 보이지 않고, 위 방법이 제일 접근하기 쉬운 방법으로 생각된다.

반응형

댓글