s5unnyjjj's LOG
[홀로 하는 코딩 공부] 혼자서 하는 틱택토(Python) 본문
프로그래머스
사용 언어: Python
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/160585#
*** 본 문제를 푸는 과정을 공유하려 한다.
▶ 문제에 주어진 테스트 케이스랑 문제에 작성된 "규칙을 어기는 실수"에 해당하는 부분을 고려하여 작성하였다.
def check_winning(board):
win_O, win_X = 0, 0
if board[0][0] == board[1][1] == board[2][2]:
if board[0][0] == "O":
win_O += 1
elif board[0][0] == "X":
win_X += 1
for i in range(3):
if board[i][0] == board[i][1] == board[i][2]:
if board[i][0] == "O":
win_O += 1
elif board[i][0] == "X":
win_X += 1
if board[0][i] == board[1][i] == board[2][i]:
if board[0][i] == "O":
win_O += 1
elif board[0][i] == "X":
win_X += 1
return [win_O, win_X]
def solution(board):
num_O, num_X = 0, 0
for i in range(3):
for j in range(3):
if board[i][j] == "O":
num_O += 1
elif board[i][j] == "X":
num_X += 1
if num_O == 0 and num_X == 0:
return 1
win_O, win_X = check_winning(board)
if win_O and win_X:
return 0
if num_O == num_X:
if win_O >= 1:
return 0
else:
return 1
if num_O == (num_X + 1):
if (win_O == 0 and win_X >= 1):
return 0
else:
return 1
return 0
▶ 92.6점이 나왔다. return 1이나 0을 결정하는 부분에서 예외 케이스가 있을 거라 생각하고 해당 부분의 코드를 찾아보고 테스트 케이스를 추가해도 답이 안보였다. 그래서 생각을 바꿔서 승리 여부를 결정하는 check_winning에 실수가 있지않을까 싶어 해당 부분을 봤다. 어이없는 실수였다. 대각선을 왼쪽위에서 시작하는 것만 체킹하고 오른쪽위에서 시작하는 것을 체킹하지 않았던것이었다. 해당부분을 추가하였다.
def check_winning(board):
win_O, win_X = 0, 0
if board[0][0] == board[1][1] == board[2][2]:
if board[0][0] == "O":
win_O += 1
elif board[0][0] == "X":
win_X += 1
if board[0][2] == board[1][1] == board[2][0]:
if board[0][2] == "O":
win_O += 1
elif board[0][2] == "X":
win_X += 1
for i in range(3):
if board[i][0] == board[i][1] == board[i][2]:
if board[i][0] == "O":
win_O += 1
elif board[i][0] == "X":
win_X += 1
if board[0][i] == board[1][i] == board[2][i]:
if board[0][i] == "O":
win_O += 1
elif board[0][i] == "X":
win_X += 1
return [win_O, win_X]
def solution(board):
num_O, num_X = 0, 0
for i in range(3):
for j in range(3):
if board[i][j] == "O":
num_O += 1
elif board[i][j] == "X":
num_X += 1
if num_O == 0 and num_X == 0:
return 1
win_O, win_X = check_winning(board)
if win_O and win_X:
return 0
if num_O == num_X:
if win_O >= 1:
return 0
else:
return 1
if num_O == (num_X + 1):
if (win_O == 0 and win_X >= 1):
return 0
else:
return 1
return 0
▶ 통과다. 난이도가 있는 문제는 아닌 것 같다.
>> 위 내용은 필자가 코딩테스트 문제를 푼 코드입니다.
>> 부족한 점이 많을 수 있기에 잘못된 내용이나 궁금한 사항이 있으면 댓글 달아주시기 바랍니다.
>> 긴 글 읽어주셔서 감사합니다.
반응형
'Algorithm > Python' 카테고리의 다른 글
[홀로 하는 코딩 공부] 디펜스 게임(Python) (0) | 2024.05.02 |
---|---|
[홀로 하는 코딩 공부] 이모티콘 할인행사(Python) (2) | 2024.05.01 |
[홀로 하는 코딩 공부] 리코쳇 로봇(Python) (0) | 2024.04.17 |
[홀로 하는 코딩 공부] 광물 캐기(Python) (0) | 2024.04.16 |
[홀로 하는 코딩 공부] 연속된 부분 수열의 합(Python) (0) | 2024.04.15 |
Comments