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