알고리즘

[백준, 10026번] 적록색약

hminor 2023. 8. 23. 10:18

풀이

  • bfs를 사용해서 풀었으며 
  • 적록색약의 경우는 visit1과 bfs1로 
  • 아닐 경우엔 visit2와 bfs2로 풀 수 있도록 해결

 

import sys
from collections import deque

def bfs1():
    while q:
        y,x = q.popleft()
        for ny,nx in [[-1,0],[1,0],[0,-1],[0,1]]:
            dy,dx = y+ny,x+nx
            if 0<=dy<n and 0<=dx<n and not visit1[dy][dx] and arr[y][x] == arr[dy][dx]:
                visit1[dy][dx] = 1
                q.append([dy,dx])
    return

def bfs2():
    while q:
        y,x = q.popleft()
        for ny,nx in [[-1,0],[1,0],[0,-1],[0,1]]:
            dy,dx = y+ny,x+nx
            if 0<=dy<n and 0<=dx<n and not visit2[dy][dx]:
                if (arr[y][x] in ('R','G') and arr[dy][dx] in ('R','G')) or (arr[y][x] == 'B' and arr[dy][dx] == 'B'):
                    visit2[dy][dx] = 1
                    q.append([dy,dx])
    return

input = sys.stdin.readline
n = int(input())
arr = [list(input().rstrip('\n')) for _ in range(n)]

visit1 = [[0]*n for _ in range(n)]
visit2 = [[0]*n for _ in range(n)]
result1,result2 = 0,0
q = deque([])

for i in range(n):
    for j in range(n):
        if not visit1[i][j]: # 적록색약 x
            result1 += 1
            visit1[i][j] = 1
            q.append([i,j])
            bfs1()
        if not visit2[i][j]: # 적록색약 o
            result2 += 1
            visit2[i][j] = 1
            q.append([i,j])
            bfs2()
print(result1, end=' ')
print(result2)

'알고리즘' 카테고리의 다른 글

[백준, 파이썬 , 10817번] 세 수  (0) 2023.08.28
[백준, 2468번] 안전 영역  (2) 2023.08.23
[백준, 13116번] 30번  (0) 2023.08.21
[백준, 9372번] 상근이의 여행  (0) 2023.08.21
[백준, 4963번] 섬의 개수  (0) 2023.08.20