๐๏ธ Algorithm/๐ฉ ๋ฐฑ์ค
๐ฉ [๋ฐฑ์ค] [Python] [BFS/DFS] 10026๋ฒ_์ ๋ก์์ฝ
Dbswnstjd
2022. 11. 17. 00:05
๋ฌธ์
https://www.acmicpc.net/problem/10026
10026๋ฒ: ์ ๋ก์์ฝ
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค. ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก)
www.acmicpc.net
ํ์ด
BFS๋ฅผ ์ด์ฉํ ํ์ด
# ๋ฐฑ์ค 10026๋ฒ ๋ฌธ์ - ์ ๋ก์์ฝ
from collections import deque
dx, dy = [0,0,-1,1], [1,-1,0,0]
n = int(input())
graph = []
for _ in range(n):
graph.append(list(map(str, input())))
answer = 0
def bfs(x, y):
queue = deque()
queue.append((x,y))
visited[x][y] = 1
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# ์ธ๋ฑ์ค ๋ฒ์ ์์ ์์ผ๋ฉด์, ๊ฐ์ ์์ด๋ฉด์, ๋ฐฉ๋ฌธ ์ํ ๊ฒฝ์ฐ
if 0<=nx<n and 0<=ny<n and graph[nx][ny] == graph[x][y] and visited[nx][ny] == 0:
visited[nx][ny] = 1
queue.append((nx, ny))
# ์ ๋ก์๋งน์ด ์๋ ์ฌ๋
visited = [[0]*(n) for _ in range(n)]
answer1 = 0
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
bfs(i,j)
answer1 += 1
# ์ ๋ก์๋งน์ธ ์ฌ๋
visited = [[0]*(n) for _ in range(n)]
answer2 = 0
for i in range(n):
for j in range(n):
if graph[i][j] == 'G':
graph[i][j] = 'R'
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
bfs(i, j)
answer2 += 1
print(answer1, answer2)
DFS๋ฅผ ์ด์ฉํ ํ์ด
# DFS
from collections import deque
import sys
sys.setrecursionlimit(1000000)
dx, dy = [0,0,-1,1], [1,-1,0,0]
n = int(input())
graph = [list(map(str, input())) for _ in range(n)]
def dfs(x, y):
visited[x][y] = 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<= nx < n and 0 <= ny < n and graph[nx][ny] == graph[x][y] and visited[nx][ny] == 0:
dfs(nx,ny)
# ์ ๋ก์๋งน์ด ์๋ ๊ฒฝ์ฐ
visited = [[0]*(n) for _ in range(n)]
answer1 = 0
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
dfs(i,j)
answer1 += 1
# ์ ๋ก์๋งน์ธ ๊ฒฝ์ฐ
visited = [[0]*(n) for _ in range(n)]
answer2 = 0
for i in range(n):
for j in range(n):
if graph[i][j] == 'G':
graph[i][j] = 'R'
for i in range(n):
for j in range(n):
if visited[i][j] == 0:
answer2 += 1
dfs(i,j)
print(answer1, answer2)