알고리즘/백준[baekjoon]

[baekjoon] 백준 10026번 : 적록색약 (by python) bfs dfs

코딩하는이씨 2022. 7. 13. 23:13
728x90
반응형

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

 

10026번: 적록색약

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

www.acmicpc.net

 

정답 code

-bfs활용

#적록색약
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1,1,0,0]
dy = [0,0,-1,1]

def bfs(x,y):
    q.append([x,y])
    visit[x][y] = cnt
    while q:
        x, y = q.popleft()
        for i in range(4):
            nx = dx[i] + x
            ny = dy[i] + y
            if 0<=nx< n and 0<=ny< n:
                if color[nx][ny] == color[x][y] and visit[nx][ny] == 0:
                    q.append([nx,ny])
                    visit[nx][ny] = 1
                
n = int(input())
color = [list(input()) for _ in range(n)]
visit = [[0]*n for _ in range(n)]
q = deque()

cnt = 0
for i in range(n):
    for j in range(n):
        if visit[i][j] == 0:
            bfs(i,j)
            cnt += 1
print(cnt,end=' ')

for i in range(n):
    for j in range(n):
        if color[i][j] == 'R':
            color[i][j] = 'G'
    
visit = [[0]*n for _ in range(n)]

cnt = 0
for i in range(n):
    for j in range(n):
        if visit[i][j] == 0:
            bfs(i,j)
            cnt += 1
        
print(cnt)

 

solution

적록색약이 아닌 사람이 봤을 때의 구역의 개수와 적록색약인 사람이 봤을 때의 구역의 수를 구분하여 출력해야하는데 

적록색약인 사람이 봤을때 구역수는 R 과 G를 합하여만든 구역수로 출력하면 된다.

 

먼저 방문하지 않은 색깔에대해 bfs함수를 실행해 구역수를 구해주고 

R을 G로 변환후 방문 함수를 초기화 시키고 구역수를 구해준다.

728x90
반응형