반응형
문제
틱택토는 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 정도가 나온다
다른 풀이
따로 특이한 풀이는 보이지 않고, 위 방법이 제일 접근하기 쉬운 방법으로 생각된다.
반응형
'Coding Test > Python' 카테고리의 다른 글
[프로그래머스] 연속 펄스 부분 수열의 합 Python 풀이 (0) | 2023.03.24 |
---|---|
[Codility] Carol of the Code Python (코드 업데이트) (1) | 2023.03.13 |
[프로그래머스] 대충 만든 자판 Python 풀이 (0) | 2023.03.09 |
[Codility Challenge] Year of the Rabbit Python (코드 업데이트) (0) | 2023.02.02 |
[Codility Challenge] National Coding Week 2022 Python (0) | 2022.10.22 |
댓글