[풀이 방법]
- 틱택토에서 성립되지 않은 case를 찾았습니다.
- 1. O가 완성 되었는데 X의 개수가 O의 개수와 같거나 더 많은 경우
- 2. X가 완성 되었는데 O와 X의 개수가 다른 경우
- 3. O와 X가 둘다 완성된 경우
- 4. O의 갯수가 X의 개수보다 작거나 O의 개수가 X의 개수 + 1 보다 많은 경우
- 이 문제에서 제일 시간을 많이 잡아먹은 경우는 4번 조건 이었습니다. 완성된 case가 없어도, O의 갯수는 항상 x의 개수와 같거나 더 많아야 하며, O의 개수가 X의 개수 + 1 보다 클 수 없습니다.
- 그런 다음, 주어진 배열을 탐색하면서 수직 / 수평 / 대각선으로 만들어질 수 있는 case를 모두 찾았습니다.
[풀이 코드]
def get_count(board):
o = 0
x = 0
for i in board:
o += i.count('O')
x += i.count('X')
return (o, x)
def get_game_set(board, o, x):
horizontal = []
vertical = [''] * 3
diagonal = [''] * 2
for i in range(len(board)):
diagonal[0] += board[i][i]
diagonal[1] += board[2 - i][i]
for i in range(len(board)):
for j in range(len(board)):
vertical[j] += board[i][j]
for line in board:
if line[0] == line[1] and line[1] == line[2]:
horizontal.append(line[0] * 3)
fin = horizontal + vertical + diagonal
if 'OOO' in fin and 'XXX' in fin:
return 0
elif ('XXX' in fin and o != x): # "XXX"만 완성되면 O와 X의 갯수는 동일해야한다
return 0
elif ('OOO' in fin and x >= o): # "OOO"만 완성되면 O의 갯수는 무조건 X의 갯수보다 많아야한다.
return 0
return 1
def solution(board):
o, x = get_count(board)
if o < x or o > x + 1:
return 0
return get_game_set(board, o, x)
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/python] 우박수열 정적분 (0) | 2023.03.09 |
---|---|
[프로그래머스/python] 테이블 해시 함수 (0) | 2023.03.09 |
[프로그래머스/python] 미로 탈출 (0) | 2023.03.06 |
[프로그래머스/python] 무인도 여행 (0) | 2023.03.03 |
[프로그래머스/python] 귤 고르기 (0) | 2023.03.03 |