- 문제 : 오목
- 난이도 : 실버 2
- 언어 : Python
- 문제 링크 : https://www.acmicpc.net/problem/2615
def omok():
# 초기 승리 0으로 설정
win = 0
for i in range(19):
for j in range(19):
# 바둑알이 있으면
if arr[i][j] != 0:
for d in range(4):
cnt = 1
ni = i + di[d]
nj = j + dj[d]
while 0 <= ni < 19 and 0 <= nj < 19 and arr[ni][nj] == arr[i][j]:
cnt += 1
ni += di[d]
nj += dj[d]
if cnt == 5:
# 육목 판정
if 0 <= ni < 19 and 0 <= nj < 19 and arr[ni][nj] == arr[i][j]:
break
if 0 <= i - di[d] < 19 and 0 <= j - dj[d] < 19 and arr[i - di[d]][j - dj[d]] == arr[i][j]:
break
# 육목이 아니면 초기 발견한 돌의 색깔
else:
win = arr[i][j]
return win, i + 1, j + 1
return win, 0, 0
arr = [list(map(int, input().split())) for _ in range(19)]
di = [0, 1, 1, -1]
dj = [1, 1, 0, 1]
win, i, j = omok()
if win == 0:
print(win)
else:
print(win)
print(i, j)
주의해야 할 부분은 육목판정과 이겼을 경우에는 둘째 줄에 연속된 다섯 개의 바둑알 중에서 가장 왼쪽에 있는 바둑알을 출력해야 한다.
육목 판정은 오목 판정 이후 첫 번째 바둑알 위치 바로 전 값이 자신과 같은 색이라면 육목이게 되고, 다섯번째 바둑알 다음의 색이 자신과 같은 색이라면 육목이게 된다.
'BOJ' 카테고리의 다른 글
백준 1259. 팰린드롬수[Python] (0) | 2022.04.17 |
---|---|
백준 10164. 격자상의 경로 [Python] (0) | 2022.04.16 |
백준 10989. 수 정렬하기 3 [Python] (0) | 2022.04.07 |
백준 1931. 회의실 배정 [Python] (0) | 2022.03.31 |
백준 2309. 일곱 난쟁이 [Python] (0) | 2022.03.29 |