알고리즘/백준

[Python] 백준 10026 : 적록색약

suwonieee 2023. 5. 5. 17:02

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

 

10026번: 적록색약

적록색약은 빨간색과 초록색의 차이를 거의 느끼지 못한다. 따라서, 적록색약인 사람이 보는 그림은 아닌 사람이 보는 그림과는 좀 다를 수 있다. 크기가 N×N인 그리드의 각 칸에 R(빨강), G(초록)

www.acmicpc.net

간단한 bfs 문제. 적록색약이 아닌 경우를 먼저 구해주고, 그림 리스트를 전부 돌며 R을 G로 바꿔준 후 다시 bfs를 실시했다.

from collections import deque
dir = [(0,-1),(0,1),(-1,0),(1,0)]
def area(r,c):
    q = deque()
    visited[r][c] = True
    q.append((r,c))
    while q:
        r,c= q.popleft()
        for k in range(4):
            nr = r + dir[k][0]
            nc = c + dir[k][1]
            if 0<=nr<N and 0<=nc<N and not visited[nr][nc] and arr[nr][nc] == arr[r][c]:
                visited[nr][nc] = True
                q.append((nr,nc))
    return
N = int(input())
arr = [list(input()) for _ in range(N)]
visited = [[False] * (N) for _ in range(N)]
normal_cnt = abnormal_cnt = 0
#적록색약 X
for r in range(N):
    for c in range(N):
        if not visited[r][c]:
            area(r,c)
            normal_cnt += 1
#적록색약 O
for r in range(N):
    for c in range(N):
        if arr[r][c] == 'R':
            arr[r][c] = 'G'

visited = [[False] * (N) for _ in range(N)]
for r in range(N):
    for c in range(N):
        if not visited[r][c]:
            area(r,c)
            abnormal_cnt += 1

print(normal_cnt, abnormal_cnt)