시작하는 중
프로그래머스 - 혼자서 하는 틱택토 본문
https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
난생 처음 반례를 처음 제출해본 문제이다!
반례 생각해낸게 흥분되서 ㅋㅋ 풀다가 다른거 공부하는데 집중못했고 이거 다시푸는데도 집중 못했음 ㅠㅠ
바로 정답 도출 flow
정답이 되는 케이스와 O빙고, X빙고 둘 다 존재하는 경우를 제외하면 return을 해주면 된다.
정답이 되는 케이스는
1. 빙고가 없을 경우 O가 X보다 1개 많거나 O와 X가 같은 경우(0개를 포함)
2. 빙고가 있는 경우
2-1. O빙고와 X빙고가 둘 다 존재하면 정답이 아님!!
2-2. O빙고만 존재하면 O가 X보다 하나 더 많아야 함
2-3. X빙고만 존재하면 X와 O의 숫자가 같아야 함
1. board 배열 순회하며 O와 X의 갯수를 세며 OX 배열에 저장
2. 가로 세로 대각선에 대한 빙고를 확인하며 winner 배열에 저장
3. winner 배열에 대해 정답이 되는 케이스 조건문 검사
def solution(board):
answer = 0
OX = [0,0]
for y in range(3):
board[y] = list(board[y])
for x in range(3):
if board[y][x] == "O":
OX[0] += 1
elif board[y][x] == "X":
OX[1] += 1
# O와 X의 갯수에 대한 계산
if OX[1] > OX[0]:
return 0
if OX[0] > OX[1] + 1:
return 0
if OX[0] == 0 and OX[1] == 0:
return 1
winner = []
# 가로, 세로 빙고 계산
for i in range(3):
if board[i][0] != ".":
for x in range(3):
if board[i][x] != board[i][0]:
break
else:
winner.append(board[i][0])
if board[0][i] != ".":
for y in range(3):
if board[y][i] != board[0][i]:
break
else:
winner.append(board[0][i])
# 빙고 계산
if board[0][0] != ".":
for i in range(1,3):
if board[i][i] != board[0][0]:
break
else:
winner.append(board[0][0])
if board[0][2] != ".":
for i in range(1,3):
if board[i][2-i] != board[0][2]:
break
else:
winner.append(board[0][2])
# 규칙에 대한 검사
if winner:
if "X" in winner and "O" in winner:
pass
else:
if winner[0] == "O":
if OX[0] == OX[1] + 1:
return 1
else:
if OX[0] == OX[1]:
return 1
else:
if OX[0] == OX[1] + 1 or OX[0] == OX[1]:
return 1
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 택배 배달과 수거하기 (0) | 2023.03.05 |
---|---|
프로그래머스 - 연속 부분 수열 합의 개수 (0) | 2023.02.28 |
프로그래머스 - 미로 탈출 (0) | 2023.02.23 |
프로그래머스 - 압축 (0) | 2023.02.22 |
프로그래머스 - 오픈채팅방 (0) | 2023.02.21 |