< DFS 풀이 >
//dfs 풀이
import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
n = int(input())
graph = [list(input().rstrip()) for _ in range(n)]
visited = [[False] * n for _ in range(n)]
cnt = cnt2 = 0
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def dfs(x,y):
visited[x][y] = True
now = graph[x][y]
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if (0 <= nx < n) and (0 <= ny < n):
if visited[nx][ny] == False and graph[nx][ny] == now:
dfs(nx,ny)
for i in range(n):
for j in range(n):
if visited[i][j] == False:
dfs(i,j)
cnt += 1
for i in range(n):
for j in range(n):
if graph[i][j] == 'R':
graph[i][j] = 'G'
visited = [[False] * n for _ in range(n)]
for i in range(n):
for j in range(n):
if visited[i][j] == False:
dfs(i,j)
cnt2 += 1
print(cnt,cnt2)
< BFS 풀이 >
from collections import deque
def BFS(x,y):
q.append((x,y))
dx = [-1,0,1,0]
dy = [0,1,0,-1]
visited[x][y] = 1
while q:
x, y = q.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if 0<=nx<N and 0<=ny<N and a[nx][ny] == a[x][y] and not visited[nx][ny]:
visited[nx][ny] = 1\
q.append((nx,ny))
N = int(input())
a = [list(input()) for _ in range(N)]
q = deque()
# 적록색약 아닌 경우
visited = [[0] * N for _ in range(N)]
cnt1 = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
BFS(i,j)
cnt1 += 1
# 적록색약인 경우
for i in range(N):
for j in range(N):
if a[i][j] == 'G':
a[i][j] = 'R'
visited = [[0] * N for _ in range(N)]
cnt2 = 0
for i in range(N):
for j in range(N):
if not visited[i][j]:
BFS(i,j)
cnt2 += 1
print(cnt1, cnt2)
'문제풀이 > 백준(Boj) 문제풀이' 카테고리의 다른 글
[백준][DFS/BFS] 11725.트리의 부모 찾기 (파이썬/Python) (0) | 2021.12.23 |
---|---|
[백준][DFS] 6118.숨바꼭질 (파이썬/Python) (0) | 2021.12.21 |
[백준][Dijkstra/다익스트라] 2206.벽 부수고 이동하기 (파이썬/Python) (0) | 2021.12.17 |
[백준][BFS] 2206.벽 부수고 이동하기 (파이썬/Python) (0) | 2021.12.16 |
[백준][DFS/BFS] 11724. 연결 요소의 개수 (파이썬/Python) (0) | 2021.12.14 |