๋ฐฑ์ค 11448๋ฒ
https://www.acmicpc.net/problem/11448
๋ฌธ์
ํ๊ธฐ
๋งํ ์ฌ๋์ด ๋ง์ง ์์ ๊ทธ๋ํ ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ํ์ ์ฌ๋์ด ์ ์ ์์ผ๋ก ์ ๋ ฌํด์ ์ฐพ์ ๋ฌธ์ ๋ค.
์์ด๋ก ๋์ด์์ด ๊ฝค(?) ์ค๋ ์๊ฐ์ ๊ฑธ๋ ค ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ํ๊ธฐ ์์ํ ๋ฌธ์ ๋ค.
๊ธฐ๋ณธ์ ์ธ ํ์ ๊ธฐํ DFS ๋ฌธ์ ๋ค๊ณผ ๊ฐ์ผ๋ฉฐ, ์ํ์ข์ฐ๋๊ฐ์ ์ ํ์ํ๋ค.
W๋ฅผ ๋ฐ๊ฒฌํ๋ฉด W๊ฐ ๋ค๋ฅธ ๋ ์ผ๋ก ๋ป์ด ๋๊ฐ๋๋ฐ( ๊ฐ์ผ์ํค๋ฏ์ด )
์ด๋ก ์ธํด w๊ฐ ๋ช๊ฐ์ "-" ํ์ดํฐ์ ์ ์ผ์ํฌ ์ ์๋๊ฐ์ ๋ํ ๋ฌธ์ ๋ค.
"w"๋ฅผ ๋ง๋๋ฉด dfs๋ฅผ ์์ํ๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌํ๋ฉฐ , ์ต์ข ์ ์ผ๋ก ๋ช๊ฐ์ ํ์ดํฐ์ w๋ก ๋ฐ๊ฟจ๋์ง
์ถ๋ ฅํ๋ฉด ๋๋ค.
๋์ ํ์ด
import sys
input= sys.stdin.readline
sys.setrecursionlimit(10**7)
dx = [-1,-1,-1,0,0,1,1,1] #์ํ์ข์ฐ ๋๊ฐ์
dy = [-1,0,1,-1,1,-1,0,1]
def dfs(x,y):
global result
if x<=-1 or x>=N or y<=-1 or y>=N:
return False
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if nx<=-1 or nx>=N or ny<=-1 or ny>=N:
continue
if graph[nx][ny]=="-": #ํ์ดํฐ์ ๋ง๋๋ฉด
result+=1
graph[nx][ny] ="w" #w๋ก ๋ฐ๊พธ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ์ด 1 ์ฆ๊ฐ๋๋ค.
dfs(nx,ny)
return True
T = int(input())
for _ in range(T):
N = int(input())
graph = []
result = 0
for _ in range(N):
graph.append(list(map(str,input().rstrip())))
visited = [[False] * N for _ in range(N)]
for i in range(N):
for j in range(N):
if graph[i][j]=="w" and not visited[i][j] : #dfsํ ๊ฒฐ๊ณผ์ถ๋ ฅ
dfs(i,j)
print(result)