< 문제 >
< 입출력 >
< 풀이 >
방문하지 않은 구역의 인덱스인 경우, 큐에 넣어준다.
큐의 상하좌우를 순서대로 들러, 방문 하지 않은 구역이면서, 해당 배열의 값과 같은 값인 경우, 큐에 새로운 값을 넣어주고, 해당 배열의 방문 여부를 True로 바꿔준다.
N * N 배열을 순서대로 dfs를 돌려, 개수를 세어 출력한다.
< 코드 >
from collections import deque
def dfs(x, y):
q.append((x, y))
checked[x][y] = True
while q:
x, y = q.popleft()
checked[x][y] = True
for i in range(4):
new_x = x + dx[i]
new_y = y + dy[i]
if 0 <= new_x < N and 0 <= new_y < N:
if arr[x][y] == arr[new_x][new_y] and not checked[new_x][new_y]:
q.append((new_x, new_y))
checked[new_x][new_y] = True
N = int(input())
arr =[]
for i in range(N):
arr.append(list(input()))
checked = [[False for _ in range(N)] for _ in range(N)]
q = deque()
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
cnt1, cnt2 = 0,0
for i in range(N):
for j in range(N):
if checked[i][j] == False:
dfs(i, j)
cnt1 += 1
for i in range(N):
for j in range(N):
if arr[i][j] =='G':
arr[i][j] ='R'
checked = [[False for _ in range(N)] for _ in range(N)]
for i in range(N):
for j in range(N):
if checked[i][j] == False:
dfs(i, j)
cnt2 += 1
print(cnt1, cnt2)
'코딩 테스트 > DFS + BFS' 카테고리의 다른 글
[백준 2457번] 공주님의 정원 문제 풀이 (with Python) (0) | 2023.11.27 |
---|---|
[백준 1987번] 알파벳 문제 풀이 (with Python) (1) | 2023.11.08 |
[백준 2668번] 숫자 고르기 문제 풀이 (with Python) (0) | 2023.11.07 |
[백준 21609번] 상어 중학교 문제 풀이 (0) | 2023.10.29 |
[백준 1012번] 유기농 배추 문제 풀이 (0) | 2023.09.09 |
댓글