๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB
GGBBB
BBBRR
BBRRR
RRRRR
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
https://www.acmicpc.net/problem/10026
๐ก ํ์ด ๋ฐ ์ฝ๋
from collections import deque
import copy
n = int(input())
graph = []
for _ in range(n):
graph.append(list(input()))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
graph1 = copy.deepcopy(graph)
def bfs0(x, y):
queue = deque()
color = graph[x][y]
queue.append((x, y))
graph[x][y] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx<0 or ny<0 or nx>=n or ny>=n:
continue
if graph[nx][ny] != color:
continue
queue.append((nx, ny))
graph[nx][ny] = 0
def bfs1(x, y):
queue = deque()
color = graph1[x][y]
queue.append((x, y))
graph1[x][y] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx<0 or ny<0 or nx>=n or ny>=n:
continue
if color == graph1[nx][ny] or {color, graph1[nx][ny]} == {'G', 'R'}:
queue.append((nx, ny))
graph1[nx][ny] = 0
count, count1 = 0, 0
for i in range(n):
for j in range(n):
if graph[i][j] != 0:
bfs0(i,j)
count += 1
if graph1[i][j] != 0:
bfs1(i,j)
count1 += 1
print(count, count1)
์ ๋ก์์ฝ์ธ ๊ฒฝ์ฐ(bfs1)์ ์๋ ๊ฒฝ์ฐ(bfs0) bfs ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ฝ๋๊ฐ ๊ธธ์ด์ง ๊ฐ์ด ์๋ค. ํจ์๋ฅผ ํ๋๋ง ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์์์ง๋ง ์ ๋ก์์ฝ์ธ ๊ฒฝ์ฐ์ ๋ํด G์ R์ ๊ฐ์ ๋ฌธ์๋ก ํต์ผ ์ํค๋ ๊ณผ์ ์์ for๋ฌธ์ด ํ๋ ๋ ์ฐ์ฌ์ผ ํ ๊ฒ ๊ฐ์ ๊ทธ๋ฅ ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค๊ธฐ๋ก ํ์๋ค.
์ ๋ ฅ๋ฐ์ graph์ ๋ณต์ฌ๋ณธ(graph1)์ ๋ง๋๋ ๊ณผ์ ์์ graph = graph1 ์ฝ๋๋ฅผ ์ฌ์ฉํ๋๋ graph์ ๋ณํ๊ฐ graph1์๋ ๊ทธ๋๋ก ๋ฐ์๋จ์ ํ์ธํ์๋ค. ๋ฐ๋ผ์, deepcopy ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ค. ํญ์ ์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ๋ฅผ ์ ์ผ๋ํด ๋์ด์ผํ ๊ฒ ๊ฐ๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 2473๋ฒ ์ธ ์ฉ์ก - ํ์ด์ฌ(Python) (3) | 2021.08.24 |
---|---|
[BOJ] ๋ฐฑ์ค 2470๋ฒ ๋ ์ฉ์ก - ํ์ด์ฌ(Python) (0) | 2021.08.24 |
[BOJ] ๋ฐฑ์ค 2468๋ฒ ์์ ์์ญ - ํ์ด์ฌ(Python) (0) | 2021.07.18 |
[BOJ] ๋ฐฑ์ค 2583๋ฒ ์์ญ ๊ตฌํ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2021.07.17 |
[BOJ] ๋ฐฑ์ค 1697๋ฒ ์จ๋ฐ๊ผญ์ง - ํ์ด์ฌ(Python) (0) | 2021.07.15 |