PGS / 혼자서 하는 틱택토 / Python
Updated:
풀면서
✅ 가능한 경우의 수를 생각할 때 일어날 수 없는 상황을 우선 고려해서 조건문을 만든다.
일어날 수 있는 상황까지 전부 다 고려하기에는 너무 복잡하니까.
근데 왜 안되냐. 아래는 실패한 코드다.
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