이번 문제는 간단하다. 그냥 같은 영역이 얼마나 되는지 찾아내는 것이다.
1. 일반인을 위한 Map, 적록색약인 사람을 위한 Map('G'와 'R'를 동일하게 보는 사람)
2. DFS를 유연하게 만들어서 시간을 줄인다.
n = int(input())
NMap = []
WMap = []
for i in range(n):
tmp = list(input())
NMap.append(list(tmp))
for j in range(n):
if tmp[j] == "G":
tmp[j] = "R"
WMap.append(tmp)
def DFS(x,y, Map):
s = [(x,y,Map[x][y])]
Map[x][y] = 0
dx = [0,0,1,-1] #동서남북
dy = [1,-1,0,0]
while s:
x,y,z = s.pop()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0<=nx<n) and (0<=ny<n) and (Map[nx][ny] == z):
s.append([nx,ny,z])
Map[nx][ny] = 0
#일반인
count = [0,0]
for i in range(n):
for j in range(n):
if NMap[i][j] != 0:
DFS(i,j, NMap)
count[0] += 1
if WMap[i][j] != 0:
DFS(i,j,WMap)
count[1] += 1
for i in count:
print(i, end=" ")
'알고리즘' 카테고리의 다른 글
백준 1202 보석도둑 c++ 풀이 (priority queue, vector, 우선순위 큐) (0) | 2021.07.21 |
---|---|
백준 3055 C++ 풀이 (탈출, BFS) (0) | 2021.07.19 |
백준 2583 파이썬 풀이 (영역 구하기, DFS) (0) | 2021.07.17 |
백준 1987 파이썬 풀이 (알파벳, DFS) (0) | 2021.07.17 |
백준 2206 파이썬 풀이 (BFS, 벽 부수고 이동하기, 이차 배열 사용) (0) | 2021.07.12 |