Updated:

PGS / 혼자서 하는 틱택토

풀면서

✅ 가능한 경우의 수를 생각할 때 일어날 수 없는 상황을 우선 고려해서 조건문을 만든다.
일어날 수 있는 상황까지 전부 다 고려하기에는 너무 복잡하니까.
근데 왜 안되냐. 아래는 실패한 코드다.

def solution(board):
    
    # 개수 카운트
    O_ = X_ = 0
    O_3 = X_3 = 0
    for i in range(3):
        cnt1 = board[i].count('O')
        O_ += cnt1
        if cnt1 == 3:
            O_3 += 1
        
        cnt2 = board[i].count('X')
        X_ += cnt2
        if cnt2 == 3:
            X_3 += 1
        
    if [board[0][0], board[1][1], board[2][2]] == ['O', 'O', 'O']:
        O_3 += 1
    elif [board[0][0], board[1][1], board[2][2]] == ['X', 'X', 'X']:
        X_3 += 1
    
    if [board[0][2], board[1][1], board[2][0]] == ['O', 'O', 'O']:
        O_3 += 1
    elif [board[0][2], board[1][1], board[2][0]] == ['X', 'X', 'X']:
        X_3 += 1
        
    if abs(O_ - X_) > 1 or O_ < X_:
        return 0
    elif O_3 > 0 and X_3 > 0:
        return 0
    elif O_3 > 0 and O_ != X_ + 1:
        return 0
    elif X_3 > 0 and  X_ != O_:
        return 0
    return 1


code ⌨️

최종 코드다. 그런데 위의 코드랑 대체 뭐가 다른 건지 모르겠다. 위 코드와는 종료 조건문의 순서만 조금 다른데 이 부분에서 걸러지는 케이스의 차이가 생긴 것 같다.

def solution(board):
    
    o_ = x_ = 0
    for b in board:
        o_ += b.count('O')
        x_ += b.count('X')
        
    if o_ + x_ == 0:
        return 1
    if abs(o_ - x_) > 1 or o_ < x_:
        return 0
    
    o_3 = x_3 = False
    for i in range(3):
        # 가로
        if [board[i][0], board[i][1], board[i][2]] == ['O', 'O', 'O']:
            o_3 = True
        elif [board[i][0], board[i][1], board[i][2]] == ['X', 'X', 'X']:
            x_3 = True
            
        # 세로
        if [board[0][i], board[1][i], board[2][i]] == ['O', 'O', 'O']:
            o_3 = True
        elif [board[0][i], board[1][i], board[2][i]] == ['X', 'X', 'X']:
            x_3 = True
            
        
        if i == 1:
            # 좌-우 대각선
            if [board[0][0], board[1][1], board[2][2]] == ['O', 'O', 'O']:
                o_3 = True
            elif [board[0][0], board[1][1], board[2][2]] == ['X', 'X', 'X']:
                x_3 = True
            # 우-좌 대각선
            if [board[0][2], board[1][1], board[2][0]] == ['O', 'O', 'O']:
                o_3 = True
            elif [board[0][2], board[1][1], board[2][0]] == ['X', 'X', 'X']:
                x_3 = True
    
    if o_3 and x_3:
        return 0
    if o_3 and o_ != x_ +1:
        return 0
    if x_3 and x_ != o_:
        return 0
    
    return 1


풀고 나서👆👀

감이 안 잡혀서 결국 풀이를 찾아본 문제다..
코테 문제를 풀 때 노가다 풀이는 절대 정답이 아닐 거다라는 .. 그런 생각을 자꾸 한다. 귀찮은걸까
귀찮아하지 말자.

Leave a comment