๐ 10026 ๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค. ๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB GGBBB BBBRR BBRRR RRRRR
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
๐ง ํ์ด
๊ทธ๋ํ ํ์ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํ์๋ค.
xx์ yy๋ฅผ ๋์ด ์ํ์ข์ฐ๋ฅผ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๋๋ก ํ๊ณ DFS๋ฅผ ์ฌ์ฉํ์๋ค.
์ ๋ก์์ฝ์ ํน์ง์ ๋ฐ๋ผ Red์ Green์ ๊ตฌ๋ถํ ์ ์๋ (๊ฐ์ ์์ผ๋ก ๋ณด์ด๋) ๊ฒฝ์ฐ๋ค์ ๋ฐ๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค. ๊ธฐ์กด ๊ทธ๋ํ์์ ์ด๋ก์(G)์ด๋ฉด ๋นจ๊ฐ์(R)์ผ๋ก ๋ฐ๊พธ์ด ์ฃผ์๋ค.
์ฒ์์ ์ฌ๊ท๋ฅผ ์๊ฐํ์ง ๋ชปํ๊ณ ๊ทธ๋ฅ ์ ์ถํ๋๋ '๋ฐํ์ ์๋ฌ' ๊ฐ ๋ฐ์ํ๋ค. sys.setRecursion ํจ์๋ฅผ ์ฌ์ฉํด์ ํด๊ฒฐํ์๋ค.
import sys
sys.setrecursionlimit(10**5)
N = int(input())
graph = []
visited = [[False] * N for _ in range(N)]
normal_count = 0
disabled_count = 0
for _ in range(N):
graph.append(list(input().rstrip()))
xx = [0, 0, 1, -1]
yy = [1, -1, 0, 0]
def dfs(x, y) :
visited[x][y] = True
color = graph[x][y]
for i in range(4) :
nx = x + xx[i]
ny = y + yy[i]
if (0 <=nx < N) and (0 <= ny < N) :
if visited[nx][ny] == False :
if graph[nx][ny] == color :
dfs(nx, ny)
for i in range(N) :
for j in range(N) :
if visited[i][j] == False :
dfs(i, j)
normal_count += 1
print(normal_count)
for i in range(N) :
for j in range(N) :
if graph[i][j] == 'G' :
graph[i][j] = 'R'
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)
disabled_count += 1
print(disabled_count)