https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
'O'의 개수가 'X'의 개수보다 1개 많거나 같아야 하고 게임판에 'OOO'와 'XXX'가 동시에 존재하면 안된다는 아이디어로 문제를 풀었다
근데 일부 테스트케이스가 틀렸다고 나왔다
그래서 다른분의 풀이를 참고해서 'O'가 승리한경우 'O'의 개수는 'X'의 개수보다 1개 많아야 하고, 'X'가 승리한 경우 'X'의 개수와 'O'의 개수가 같아야 한다는 조건을 알게되었다.
def solution(board):
cnt_O, cnt_X = 0, 0
for row in board:
for c in row:
if c == 'O':
cnt_O += 1
elif c == 'X':
cnt_X += 1
if not(0 <= cnt_O - cnt_X <= 1):
return 0
win = '.'
for i in range(3):
if board[i][0] == '.':
continue
if board[i][0] == board[i][1] and board[i][1] == board[i][2]:
if win == '.':
win = board[i][0]
elif win != board[i][0]:
return 0
for i in range(3):
if board[0][i] == '.':
continue
if board[0][i] == board[1][i] and board[1][i] == board[2][i]:
if win == '.':
win = board[0][i]
elif win != board[0][i]:
return 0
if board[0][0] != '.':
if board[0][0] == board[1][1] and board[1][1] == board[2][2]:
if win == '.':
win = board[0][0]
elif win != board[0][0]:
return 0
if board[0][2] != '.':
if board[0][2] == board[1][1] and board[1][1] == board[2][0]:
if win == '.':
win = board[0][2]
elif win != board[0][2]:
return 0
if win == 'X':
if cnt_X != cnt_O:
return 0
elif win == 'O':
if cnt_O != (cnt_X + 1):
return 0
return 1
[프로그래머스] 155651. 호텔 대실 | 정렬, 우선순위큐 | 파이썬, 소스코드, 정답 (1) | 2023.05.09 |
---|---|
[프로그래머스] 159993. 미로탈출 | BFS | 파이썬, 소스코드, 정답 (0) | 2023.05.08 |
[프로그래머스] 169198. 당구연습 | 수학 | 파이썬, 소스코드, 정답 (0) | 2023.05.06 |
[프로그래머스] 169199. 리코쳇 로봇| BFS | 파이썬, 소스코드, 정답 (1) | 2023.05.05 |
[프로그래머스] 172927. 광물 캐기| 그리디 | 파이썬, 소스코드, 정답 (1) | 2023.05.04 |