[백준] 10026 적록색약

게으른 완벽주의자·2023년 2월 16일

백준

목록 보기
12/27

백준_10026

원본 그림에서 빨간색 -> 초록색으로 바꿔준 후, 적록색약인 경우의 구역 수를 구해서 원본일 때와 함께 출력하면 된다
bfs코드는 금방 다 짰는데, 적록색약 버전인 paint_tmp를 만드는 코드에서 원본 버전의 색을 바꿔버리는 코드를 짜서 괜한데서 시간을 허비했다

from collections import deque
n = int(input())
paint = [list(input()) for _ in range(n)]
paint_tmp = [[] for _ in range(n)]
for i in range(n):
    for j in range(n):
        if paint[i][j]=='R':
            paint_tmp[i].append('G')
        else:
            paint_tmp[i].append(paint[i][j])

dx = [0,0,1,-1]
dy = [1,-1,0,0]
def bfs(graph, i, j):
    q = deque()
    q.append((i,j))
    visited[i][j] = 1
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x+dx[k]
            ny = y+dy[k]
            if 0<=nx<n and 0<=ny<n and not visited[nx][ny]:
                if graph[x][y]==graph[nx][ny]:
                    visited[nx][ny] = 1
                    q.append((nx,ny))

visited = [[0]*n for _ in range(n)]
origin = 0
for i in range(n):
    for j in range(n):
        if not visited[i][j]:
            bfs(paint, i, j)
            origin += 1

visited = [[0]*n for _ in range(n)]
tmp = 0
for i in range(n):
    for j in range(n):
        if not visited[i][j]:
            bfs(paint_tmp, i, j)
            tmp += 1

print(origin, tmp)
profile
데이터를 공부하고 있습니다

0개의 댓글