제약사항에 보면 틱택토 맵의 크기가 고정되어 있다는 것을 알 수 있으므로 비록 예쁜 코드는 아니지만 straight forward한 방식으로 풀 수 있다.
# Runtime: 24 ms, faster than 97.60% of Python3 online submissions for Find Winner on a Tic Tac Toe Game.
# Memory Usage: 13.8 MB, less than 67.71% of Python3 online submissions for Find Winner on a Tic Tac Toe Game.
# Time: O(n)
class Solution:
def tictactoe(self, moves: List[List[int]]) -> str:
mp = [[0*3 for _ in range(3)] for _ in range(3)]
winner = ''
first, second, third = 0, 0, 0
# tic-tac-toe map
for i, (x, y) in enumerate(moves):
if i % 2 : mp[x][y] = -1
else: mp[x][y] = 1
# row by row
for i, group in enumerate(mp):
if sum(group) == 3: return 'A'
elif sum(group) == -3: return 'B'
else:
first += group[0]
second += group[1]
third += group[2]
# col by col
if first == 3 or second == 3 or third == 3: return 'A'
elif first == -3 or second == -3 or third == -3: return 'B'
# diagonal by diagonal
if (mp[0][0] + mp[1][1] + mp[2][2]) == 3 or (mp[0][2] + mp[1][1] + mp[2][0]) == 3: return 'A'
elif (mp[0][0] + mp[1][1] + mp[2][2]) == -3 or (mp[0][2] + mp[1][1] + mp[2][0]) == -3: return 'B'
if len(moves) == 9 and not winner: return 'Draw'
else: return 'Pending'
https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/