티스토리 뷰
반응형
프로그래머스 혼자서 하는 틱택토 python
문제
틱택토 게임판이 주어졌을 때, 이 게임판이 실제 규칙을 지켜서 진행된 상황일 수 있는지를 판별하는 문제입니다.
- 선공은 항상 `"O"`
- 후공은 `"X"`
- 같은 표시가 가로, 세로, 대각선으로 3개 연속 나오면 게임이 끝남
- 게임이 끝났는데도 말을 더 두는 경우는 불가능
- `"O"`와 `"X"`의 개수 차이는 최대 1만 가능
테스트케이스
문제 작동원리
- 개수 규칙 검사
- 항상 \(cnt_X \le cnt_O \le cnt_X+1\) 여야 함
- 승리 판정
- O가 승리했다면 → \(cnt_O == cnt_X+1\) 이어야 함
- X가 승리했다면 → \(cnt_O == cnt_X\) 이어야 함
- O와 X가 동시에 승리하는 경우는 불가능
- 승리자가 없는 경우
- 개수 규칙만 맞으면 정상적인 진행으로 인정
아이디어
check_O(board, player)
함수를 만들어 특정 플레이어(O, X)가 승리했는지 판별- 말 개수를 세고, 개수 규칙 위반 여부 확인
- 승리 상황과 개수 관계를 함께 검사
- 조건을 통과하면 1, 그렇지 않으면 0 반환
전체코드
def check_O(arr, ans):
for i in range(3):
if arr[i][0]==arr[i][1] and arr[i][1]==arr[i][2] and arr[i][2]==ans:
return True
for i in range(3):
if arr[0][i]==arr[1][i] and arr[1][i]==arr[2][i] and arr[2][i]==ans:
return True
if arr[0][0] == arr[1][1] and arr[1][1]==arr[2][2] and arr[2][2]==ans:
return True
if arr[0][2]==arr[1][1] and arr[1][1]==arr[2][0] and arr[2][0]==ans:
return True
return False
def solution(board):
cnt_O = 0
cnt_X = 0
for i in range(3):
for j in range(3):
if board[i][j] == 'O':
cnt_O += 1
elif board[i][j] == 'X':
cnt_X += 1
o_win = check_O(board, 'O')
x_win = check_O(board, 'X')
if cnt_X > cnt_O or cnt_O > cnt_X+1: # 말 개수 규칙 위반
return 0
elif o_win and x_win: # 동시에 승리 → 불가능
return 0
elif o_win and cnt_O == cnt_X+1: # O 승리
return 1
elif x_win and cnt_O == cnt_X: # X 승리
return 1
elif not o_win and not x_win: # 승부 안 난 경우
return 1
else: # 나머지는 불가능
return 0
결론
이 문제의 핵심은 **개수 규칙**과 **승리 조건의 정합성**을 동시에 맞추는 것입니다.- 단순히 승리 여부만 체크하는 것이 아니라, **승리했을 때 말 개수가 규칙에 맞는지**까지 확인해야 합니다.
- 조건을 제대로 걸러주면 정상적인 게임판은 1, 불가능한 게임판은 0을 정확히 판별할 수 있습니다.
반응형
'백준 스터디 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 과제 진행하기 (Python) (0) | 2025.09.12 |
---|---|
프로그래머스 광물 캐기 Python (0) | 2025.09.09 |
프로그래머스 슬라이딩 로봇 Python (0) | 2025.09.09 |
프로그래머스 호텔 대실 155651 Python (0) | 2025.09.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- dfs
- 코딩
- python 알고리즘
- 프로그래밍
- 알고리즘 문제풀이
- 동적 계획법
- 코딩테스트
- 문제풀이
- 문제 풀이
- 파이썬코딩
- 그리디알고리즘
- 파이썬
- 인접 행렬
- 그래프 탐색
- 동적계획법
- 백준
- 알고리즘기초
- 객체지향
- 코딩 테스트
- 브루트포스
- 그리디
- 문자열처리
- Python
- 알고리즘문제풀이
- DP
- c언어
- C++ 알고리즘
- C++
- 알고리즘
- c++알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함
반응형