코테 대비 python/백준
백준 2615 오목
ylab
2023. 4. 21. 16:28
https://www.acmicpc.net/problem/2615
2615번: 오목
오목은 바둑판에 검은 바둑알과 흰 바둑알을 교대로 놓아서 겨루는 게임이다. 바둑판에는 19개의 가로줄과 19개의 세로줄이 그려져 있는데 가로줄은 위에서부터 아래로 1번, 2번, ... ,19번의 번호
www.acmicpc.net
##다섯알을 먼저 놓으면 이김 그러나 6알은 안댐
#검은색이 이겼을 경우1 흰색 2 승부가 결정 안났으면 0
#무식하게 다찾으면 된다 단 가로 세로 대각선(우하, 좌하)
#어짜피 출력하는건 맨처음 좌표값이므로 2중 포문으로 구현
from collections import deque
#우선 입력 받자
graph = [list(map(int,input().split())) for _ in range(19)]
black=[]
white=[]
#print(graph)
for i in range(19):
for j in range(19):
if graph[i][j] ==1:
black.append((i,j))
elif graph[i][j] ==2:
white.append((i,j))
#상하좌우 오른쪽아래, 왼쪽아래, 오른쪽위, 왼쪽위
dx=[-1,1,0,0]
dy=[0,0,-1,1]
#만약 bfs로 확인하면?? 6목은 제거 확인
flag=0
def check(x,y,num):
check_row(x,y,num)
check_col(x,y,num)
check_rightdown(x,y,num)
check_leftdown(x,y,num)
return
def check_row(x,y,num):
global flag
cnt=1
q=deque()
q.append((x,y))
for i in range(5):
a,b=q.popleft()
nx=a+dx[3]
ny=b+dy[3]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
cnt+=1
q.append((nx,ny))
else:
break
##육목확인
if cnt==5:
nx=x+dx[2]
ny=y+dy[2]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
nx=a+dx[3]
ny=b+dy[3]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
flag=1
return
def check_col(x,y,num):
global flag
cnt=1
q=deque()
q.append((x,y))
for i in range(5):
a,b=q.popleft()
nx=a+dx[1]
ny=b+dy[1]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
cnt+=1
q.append((nx,ny))
else:
break
##육목확인
if cnt==5:
nx=x+dx[0]
ny=y+dy[0]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
nx=a+dx[1]
ny=b+dy[1]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
flag=1
return
def check_rightdown(x,y,num):
global flag
cnt=1
q=deque()
q.append((x,y))
for i in range(5):
a,b=q.popleft()
nx=a+dx[1]
ny=b+dy[3]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
cnt+=1
q.append((nx,ny))
else:
break
##육목확인
if cnt==5:
nx=x+dx[0]
ny=y+dy[2]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
nx=a+dx[1]
ny=b+dy[3]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
flag=1
return
def check_leftdown(x,y,num):
global flag
cnt=1
q=deque()
q.append((x,y))
for i in range(5):
a,b=q.popleft()
nx=a+dx[1]
ny=b+dy[2]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
cnt+=1
q.append((nx,ny))
else:
break
##육목확인
if cnt==5:
nx=x+dx[0]
ny=y+dy[3]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
nx=a+dx[1]
ny=b+dy[2]
if 0<=nx<19 and 0<=ny<19 and graph[nx][ny]==num:
return
flag=2
#x,y=a,b
#print(x,y)
return a,b
for i in black:
x,y=i
check(x,y,1)
if flag==1:
print(1)
print(x+1,y+1)
exit(0)
elif flag==2:
print(1)
print(x+5,y-3)
exit(0)
for i in white:
x,y=i
check(x,y,2)
if flag==1:
print(2)
print(x+1,y+1)
exit(0)
elif flag==2:
print(2)
print(x+5,y-3)
exit(0)
if flag==0:
print(0)
나만 코드 긴거같아 ㅜㅜ ㅋㅋ