본문 바로가기

백준 문제 풀이 및 피드백

2023.01.19 적록색약 백준[파이썬]

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

 

10026번: 적록색약

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

www.acmicpc.net

import sys
from copy import deepcopy
input = sys.stdin.readline

def find_area(graph,check):
    counter = 0
    graphs = deepcopy(graph)
    for i in range(n):
        for j in range(n):
            if graphs[i][j] == 0 :
                continue
            discorverd = [[i,j]]
            color = graphs[i][j]
            while discorverd:
                pos = discorverd.pop()
                graphs[pos[0]][pos[1]] = 0 
                next_pos = [[pos[0]+1,pos[1]],[pos[0]-1,pos[1]],[pos[0],pos[1]+1],[pos[0],pos[1]-1]]
                for np in next_pos:
                    if check or color == 'B':
                        if 0 <= np[0] < n and 0<= np[1] < n and graphs[np[0]][np[1]] == color:
                            discorverd.append(np)
                    elif 0 <= np[0] < n and 0<= np[1] < n and (graphs[np[0]][np[1]] == 'R' or graphs[np[0]][np[1]] == 'G'):
                        discorverd.append(np)
            counter += 1
    return counter

n = int(input().strip())
graphs = [list(input().strip()) for _ in range(n)]

print(find_area(graphs,1), find_area(graphs,0))

이번 문제는 탐색 조건을 바꿀 수 있는지를 물어보는 문제였다. 처음 보자마자 이건 dfs 나 bfs로 돌리는데 중간에 조건을 적록색약일때랑 아닐 때를 구하면 되겠다 생각했다. 물론 이렇게 따로 구하면 시간초과가 나게 문제를 만든줄 알았지만 그이번 문제는 그정도까지는 요구하지 않았다.