Problem solving

백준 12946번 육각 보드 (Python 3)

storkbear 2022. 9. 8. 17:09

 

Baekjoon online judge 12946번 파이썬

 

링크

https://www.acmicpc.net/problem/12946

 

12946번: 육각 보드

크기가 N × N인 육각 보드가 주어진다. 아래 그림은 N = 1, 2, 3, 4인 경우의 그림이다. 육각 보드의 일부 칸을 색칠하려고 한다. 두 칸이 변을 공유하는 경우에는 같은 색으로 칠할 수 없다. 어떤 칸

www.acmicpc.net

 

소스코드

import sys
input=sys.stdin.readline
index=[[-1,0],[-1,1],[0,-1],[0,1],[1,0],[1,-1]]
sys.setrecursionlimit(10**8)

color=0
def dfs(y,x):
    global color
    color=max(color,1)

    for indy,indx in index:
        ny=indy+y
        nx=indx+x
        if 0<=nx<n and 0<=ny<n and map_data[ny][nx]=='X':
            if visited[ny][nx]==0:
                visited[ny][nx]=-visited[y][x]
                dfs(ny,nx)
                color=max(color,2)
            else:
                if visited[ny][nx]==visited[y][x]:
                    color=max(color,3)
                    return


n=int(input())
map_data=[list(input().rstrip()) for _ in range(n)]
visited=[[0 for _ in range(n)] for _ in range(n)]

for i in range(n):
    for j in range(n):
        if map_data[i][j]=='X' and visited[i][j]==0:
            visited[i][j]=1
            dfs(i,j)
print(color)