프로그래머스
[프로그래머스]혼자서 하는 틱택토
진철
2023. 3. 7. 22:47
728x90
반응형
문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/160585
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
코드를 작성하기 위한 순서는 다음과 같다.
1. O나 X로 한 줄을 만들었는지 확인하는 함수를 작성한다.
2. O와 X의 갯수를 반환하는 함수를 작성한다.
3. O와 X로 모두 한 줄을 만들었다면 해당 경우는 있을 수 없는 경우이므로 0을 반환한다.
4. O로만 한 줄을 만들었다면 O가 선공이므로 X의 갯수보다 O의 갯수가 하나 더 많다면 1을 반환하고 그렇지 않으면 0을 반환한다.
5. X로만 한 줄을 만들었다면 X가 후공이므로 X의 갯수와 O의 갯수가 같다면 1을 반환하고 그렇지 않다면 0을 반환한다.
6. 한 줄로 만든 경우가 없다면 O의 갯수와 X의 갯수가 같거나(마지막으로 X를 둔 경우임) O의 갯수가 X의 갯수보다 하나 더 많다면(마지막으로 O를 둔 경우임) 1을 반환하고 그렇지 않다면 0을 반환한다.
def check(board, ox): #1번
for i in range(len(board)):
if board[i][0] == ox and board[i][1] == ox and board[i][2] == ox:
return True
for i in range(len(board)):
if board[0][i] == ox and board[1][i] == ox and board[2][i] == ox:
return True
if board[0][0] == ox and board[1][1] == ox and board[2][2] == ox:
return True
if board[0][2] == ox and board[1][1] == ox and board[2][0] == ox:
return True
return False
def count(board): #2번
o = 0
x = 0
for i in board:
for j in i:
if j == 'O':
o += 1
elif j == 'X':
x += 1
return o, x
def solution(board):
o, x = count(board)
if check(board, 'O') and check(board, 'X'): #3번
return 0
if check(board, 'O') and not check(board, 'X'): #4번
if o-1 == x:
return 1
else:
return 0
elif check(board, 'X') and not check(board, 'O'): #5번
if o == x:
return 1
else:
return 0
else:
if o == x or x+1 == o: #6번
return 1
else:
return 0
게임에서 이기는 경우를 생각해서 차근차근 조건을 제시하여 풀 수 있는 문제였다.
특히 O가 선공이라는 점에서 4, 5, 6번을 생각하는 게 핵심이었던 거서 같다.
참고로 필자는 5, 6번을 생각하지 못해서 꽤나 시간이 걸렸다. (틱택토보다는 오목이 더 재밌는뎀 ㅎ)
728x90
반응형