๐งฎ PS
๋ฐฑ์ค (boj) ํ์ด์ฌ - 10026 : ์ ๋ก์์ฝ
Newmon
2021. 8. 25. 18:47
#๋ฌธ์ ๋งํฌ : https://www.acmicpc.net/problem/10026
10026๋ฒ: ์ ๋ก์์ฝ
์ ๋ก์์ฝ์ ๋นจ๊ฐ์๊ณผ ์ด๋ก์์ ์ฐจ์ด๋ฅผ ๊ฑฐ์ ๋๋ผ์ง ๋ชปํ๋ค. ๋ฐ๋ผ์, ์ ๋ก์์ฝ์ธ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ์ ์๋ ์ฌ๋์ด ๋ณด๋ ๊ทธ๋ฆผ๊ณผ๋ ์ข ๋ค๋ฅผ ์ ์๋ค. ํฌ๊ธฐ๊ฐ N×N์ธ ๊ทธ๋ฆฌ๋์ ๊ฐ ์นธ์ R(๋นจ๊ฐ), G(์ด๋ก)
www.acmicpc.net
# ๋ถ๋ฅ : dfs
# ๋์ด๋ : Gold 5
์ ๋ก์์ฝ์ธ ๊ฒฝ์ฐ, ์ ๋ก์์ฝ์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ์ด 2๋ฒ dfs๋ฅผ ๋๋ ธ๋ค. ์๊ฐ ์ด๊ณผ๊ฐ ์ฐ๋ ค๋์์ผ๋ ์ ๋ ฅ์ด 100์ค ์ดํ๋ผ์ ๋ฌธ์ ์์ด ํต๊ณผ ๋์๋ค.
#์ฝ๋(Python)
from sys import setrecursionlimit
setrecursionlimit(10000)
n = int(input())
grid = []
visited = [[False for i in range(n)] for i in range(n)]
cnt = 0
for _ in range(n):
grid.append(list(input()))
color = ""
colors = []
colors2 = []
def is_valid(x,y):
if x >= 0 and x < n and y >= 0 and y < n:
return True
return False
def dfs(g,x,y):
global color
if not is_valid(x,y):
return False
if visited[x][y] == False and g[x][y] == color:
visited[x][y] = True
global cnt
cnt += 1
dfs(g,x-1,y)
dfs(g,x+1,y)
dfs(g,x,y+1)
dfs(g,x,y-1)
return True
return False
for x in range(n):
for y in range(n):
if grid[x][y] != 0:
color = grid[x][y]
if dfs(grid,x,y):
colors.append(color)
visited = [[False for i in range(n)] for i in range(n)]
for x in range(n):
for y in range(n):
if grid[x][y] == "R":
grid[x][y] = "G"
for x in range(n):
for y in range(n):
if grid[x][y] != 0:
color = grid[x][y]
if dfs(grid,x,y):
colors2.append(color)
print(len(colors) , len(colors2))