https://www.acmicpc.net/problem/10026
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로 돌리는데 중간에 조건을 적록색약일때랑 아닐 때를 구하면 되겠다 생각했다. 물론 이렇게 따로 구하면 시간초과가 나게 문제를 만든줄 알았지만 그이번 문제는 그정도까지는 요구하지 않았다.
'백준 문제 풀이 및 피드백' 카테고리의 다른 글
2023.01.19 비밀번호 찾기 백준[파이썬] (0) | 2023.01.19 |
---|---|
2023.01.19 ATM 백준[파이썬] (0) | 2023.01.19 |
2023.01.18 최소힙 백준[파이썬] (0) | 2023.01.18 |
2023.01.18 토마토 백준[파이썬] (0) | 2023.01.18 |
2023.01.18 좌표압축 백전 [파이썬] (0) | 2023.01.18 |