Algorithm

[백준][python]10026 적록색맹

soduddl1 2023. 6. 23. 09:07

문제

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

소스코드

from collections import deque
import sys
if __name__ == "__main__":
    n = int(input())
    arr = [input().strip() for _ in range(n)]

    dx = [1,-1,0,0]
    dy = [0,0,1,-1]

    #적록 색약이 아닌 사람이 봤을 때
    res1 = 0
    visited = [[0] * n  for _ in range(n)]
    for i in range(n):
        for j in range(n):
            if not visited[i][j]:
                res1 +=1
                visited[i][j] = 1
                q = deque()
                q.append([i,j])
                while q:
                    x,y = q.popleft()
                    for k in range(4):
                        xx = x + dx[k]
                        yy = y + dy[k]
                        if 0<=xx<n and 0<=yy<n and not visited[xx][yy]:
                            if arr[x][y] == arr[xx][yy]:
                                q.append([xx,yy])
                                visited[xx][yy] = 1
    #적록 색약인 사람이 봤을 때
    res2 = 0
    visited = [[0] * n  for _ in range(n)]
    for i in range(n):
        for j in range(n):
            if not visited[i][j]:
                res2 +=1
                visited[i][j] = 1
                q = deque()
                q.append([i,j])
                while q:
                    x,y = q.popleft()
                    for k in range(4):
                        xx = x + dx[k]
                        yy = y + dy[k]
                        if 0<=xx<n and 0<=yy<n and not visited[xx][yy]:
                            if (arr[x][y] == 'R' or arr[x][y] == 'G') and (arr[xx][yy] == 'R' or arr[xx][yy] == 'G'):
                                q.append([xx,yy])
                                visited[xx][yy] = 1
                            elif arr[x][y] == 'B' and arr[xx][yy] == 'B':
                                q.append([xx,yy])
                                visited[xx][yy] = 1

    print(res1)
    print(res2)