-
백준 2615 오목코테 대비 python/백준 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)
나만 코드 긴거같아 ㅜㅜ ㅋㅋ
'코테 대비 python > 백준' 카테고리의 다른 글
15657 n과 m (8) (0) 2023.05.03 [복습] 15649 n과 m 1 (1) 2023.04.17 [복습] 14502 연구소 (0) 2023.04.17 18115 카드 놓기 (0) 2023.04.16 2580 스도쿠 (0) 2023.04.14