๐ ๋ฌธ์
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค.
ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก), B(ํ๋) ์ค ํ๋๋ฅผ ์์น ํ ๊ทธ๋ฆผ์ด ์๋ค.
๊ทธ๋ฆผ์ ๋ช ๊ฐ์ ๊ตฌ์ญ์ผ๋ก ๋๋์ด์ ธ ์๋๋ฐ, ๊ตฌ์ญ์ ๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋, ๊ฐ์ ์์์ด ์ํ์ข์ฐ๋ก ์ธ์ ํด ์๋ ๊ฒฝ์ฐ์ ๋ ๊ธ์๋ ๊ฐ์ ๊ตฌ์ญ์ ์ํ๋ค. (์์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ ๊ฐ์ ์์์ด๋ผ ํ๋ค)
์๋ฅผ ๋ค์ด, ๊ทธ๋ฆผ์ด ์๋์ ๊ฐ์ ๊ฒฝ์ฐ์
RRRBB GGBBB BBBRR BBRRR RRRRRโ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ ์ด 4๊ฐ์ด๋ค. (๋นจ๊ฐ 2, ํ๋ 1, ์ด๋ก 1) ํ์ง๋ง, ์ ๋ก์์ฝ์ธ ์ฌ๋์ ๊ตฌ์ญ์ 3๊ฐ ๋ณผ ์ ์๋ค. (๋นจ๊ฐ-์ด๋ก 2, ํ๋ 1)
๊ทธ๋ฆผ์ด ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ก์ ๋, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ์๋ ์ฌ๋์ด ๋ดค์ ๋ ๊ตฌ์ญ์ ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ N์ด ์ฃผ์ด์ง๋ค. (1 ≤ N ≤ 100)
๋์งธ ์ค๋ถํฐ N๊ฐ ์ค์๋ ๊ทธ๋ฆผ์ด ์ฃผ์ด์ง๋ค.
๐์ถ๋ ฅ
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ๊ฐ์์ ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ดค์ ๋์ ๊ตฌ์ญ์ ์๋ฅผ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
DFS๋ฅผ ํตํด ๊ฐ ๊ตฌ์ญ์ ๊ฐฏ์๋ฅผ ์ฒดํฌํด์ฃผ๋ฉด ๋๋ ๋ฌธ์ ์๋ค.
์ง๊ธ๊น์ง ์ ํ๋ ๊ตฌ์ญ๊ฐฏ์ ์ธ๊ธฐ ๋ฌธ์ ๋ 0 ๋๋ 1 ๋ฐ์ ์์๋๋ฐ, ์ด ๋ฌธ์ ์์๋ ์ด ์ธ ๊ฐ์ ์๊น์ด ์์ด DFS ํจ์๋ฅผ ๋ง๋ค๋ ์ธ์ํ๋๋ฅผ ๋ ๋ฐ์์ ์ฒดํฌํด์ฃผ์๋ค.
์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ R,G,B ๋ฅผ ์ ๋ถ ๊ตฌ๋ถํ์ง๋ง ์ ๋ก์์ฝ์ธ ์ฌ๋์ R๊ณผ G์ ๊ตฌ๋ถ ๋ชปํ๊ธฐ ๋๋ฌธ์, ๋์ ํ๋๋ก ์ฒดํฌํด์ฃผ์ด์ผ ํ๋ค.
์ ๋ก์์ฝ์ DFS ํจ์๋ฅผ ๋ค์ ์ฌ์ฉํ๊ณ , ์ฒ์ ๋ฐ์ graph๋ฅผ ๋ณต์ฌํด์ ๋ฐ๋ก ๋ง๋ค์ด์ฃผ์ง ์๊ณ , ๊ทธ๋ฅ ์ฌ์ฉํ๊ธฐ ์ํ์ฌ ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋์ DFS ํ ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ ๋ R๊ณผ G ๋ ์ ๋ถ ๊ฐ์ ๋ฌธ์๋ก ๋ฐ๊พธ์ด ์ฃผ์๋ค.
๐ป ์ฝ๋
import sys
input = sys.stdin.readline
n=int(input())
graph = [list(map(str,input().rstrip())) for _ in range(n)]
def dfs(x,y,color):
if x <0 or x>=n or y<0 or y>=n: # ๋ฒ์ ๋ฐ์ด๋ผ๋ฉด
return False
if graph[x][y] == color: # ํ์ ์์ ๋ถ๋ถ์ ์๊ณผ ๊ฐ๋ค๋ฉด
# ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ์ ๋ก์์ฝ ํ์์ ์ํด b ๋๋ c ๋ก ํจ.
if color == 'B':
graph[x][y] = 'b' # ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
elif color == 'G' or color == 'R':
graph[x][y] = 'c' # R๊ณผ G ๋์ผํ ์์ผ๋ก ๋ฐ๊พธ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
else:
graph[x][y] = 'v' # ์ ๋ก์์ฝ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
# ์ํ์ข์ฐ ํ์
dfs(x+1, y,color)
dfs(x,y+1,color)
dfs(x-1,y,color)
dfs(x,y-1,color)
return True
return False
nomal = 0
color = 0
# ์ ๋ก์์ฝ์ด ์๋ ์ฌ๋ ํ์
for i in range(n):
for j in range(n):
if dfs(i,j,'R'): # ํ์ฌ ๋ถ๋ถ์ด R์ด๋ฉด
nomal += 1
elif dfs(i,j,'B'):
nomal += 1
elif dfs(i,j,'G'):
nomal += 1
# ์ ๋ก์์ฝ์ธ ์ฌ๋
for i in range(n):
for j in range(n):
if dfs(i,j,'c'): # ํ์ฌ ๋ถ๋ถ์ด R ๋๋ G ์ด๋ผ๋ฉด
color += 1
elif dfs(i,j,'b'):
color += 1
print(nomal, color)
๐ ๋ฌธ์ ๋งํฌ ์ ๋ก์์ฝ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 2470๋ฒ: ๋ ์ฉ์ก (0) | 2022.07.28 |
---|---|
[๋ฐฑ์ค] 1043๋ฒ: ๊ฑฐ์ง๋ง - ํ์ด์ฌ (0) | 2022.07.26 |
[๋ฐฑ์ค] 11688๋ฒ: ์ต์๊ณต๋ฐฐ์ ์ฐพ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.11 |
[๋ฐฑ์ค] 25432๋ฒ: ์ต๋ ์ต์๊ณต๋ฐฐ์ - ํ์ด์ฌ (0) | 2022.07.09 |
[๋ฐฑ์ค] 1715๋ฒ: ์นด๋ ์ ๋ ฌํ๊ธฐ - ํ์ด์ฌ (0) | 2022.07.08 |