๐ฉ [๋ฐฑ์ค] [Python] 3184๋ฒ_์
๋ฌธ์
https://www.acmicpc.net/problem/3184
3184๋ฒ: ์
์ฒซ ์ค์๋ ๋ ์ ์ R๊ณผ C๊ฐ ์ฃผ์ด์ง๋ฉฐ(3 ≤ R, C ≤ 250), ๊ฐ ์๋ ๋ง๋น์ ํ๊ณผ ์ด์ ์๋ฅผ ์๋ฏธํ๋ค. ๋ค์ R๊ฐ์ ์ค์ C๊ฐ์ ๊ธ์๋ฅผ ๊ฐ์ง๋ค. ์ด๋ค์ ๋ง๋น์ ๊ตฌ์กฐ(์ธํ๋ฆฌ, ์, ๋๋์ ์์น)๋ฅผ ์๋ฏธํ๋ค.
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 3184๋ฒ ๋ฌธ์ - ์
from collections import deque
r, c = map(int, input().split())
graph = [list(map(str, input())) for _ in range(r)]
dx, dy = [0,0,-1,1], [1,-1,0,0]
def bfs(x, y):
q = deque()
q.append((x, y))
visited[x][y] = 1
global count_sheep, count_wolf
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= r or ny < 0 or ny >= c: # ๋ฒ์๋ฅผ ๋ฒ์ด๋ ํ์ถ์ ํ ์ ์๋ ๊ฒฝ์ฐ
count_wolf = -1
count_sheep = -1
break
elif 0 <= nx < r and 0 <= ny < c and not visited[nx][ny]:
if graph[nx][ny] == '#':
visited[nx][ny] = 1
continue
elif graph[nx][ny] == '.':
visited[nx][ny] = 1
q.append((nx, ny))
elif graph[nx][ny] == 'o':
count_sheep += 1
visited[nx][ny] = 1
q.append((nx, ny))
else:
count_wolf += 1
visited[nx][ny] = 1
q.append((nx, ny))
return count_sheep, count_wolf
visited = [[0]*c for _ in range(r)]
res = [0,0]
for i in range(r):
for j in range(c):
if graph[i][j] == 'v' and not visited[i][j]: # ๋๋๊ฐ ์ฌ๋ฅ์ ์์
count_sheep = 0
count_wolf = 1 # ๋๋ ํ๋ง๋ฆฌ๋ก ์์
cnt = bfs(i, j)
if cnt[1] == -1: # ๋๋ ํผ์ ์๋ ๊ฒฝ์ฐ
continue
if cnt[0] > cnt[1]: # ์์ด ๋๋๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ
res[0] += cnt[0]
else: # ๋๋๊ฐ ์๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
res[1] += cnt[1]
elif graph[i][j] == 'o' and not visited[i][j]: # ์์ด ์ฌ๋ฅ ์์
count_sheep = 1 # ์ ํ๋ง๋ฆฌ๋ก ์์
count_wolf = 0
cnt = bfs(i, j)
if cnt[0] == -1: # ์ ํผ์ ์๋ ๊ฒฝ์ฐ
continue
if cnt[0] > cnt[1]: # ์์ด ๋๋๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ
res[0] += cnt[0]
else: # ๋๋๊ฐ ์๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ
res[1] += cnt[1]
for i in res:
print(i, end=' ')
์ด๋ฒ ๋ฌธ์ ๋ BFS๋ฅผ ํตํด ํ์๋ค.
์ฒ์์ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๊ทธ๋ ๊ฒ ์๊ฐ์ด ๊ฑธ๋ฆด๊ฑฐ ๊ฐ์ง ์์์ง๋ง ๋ฌธ์ ๋ฅผ ์ ๋๋ก ์ฝ์ง ์์์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ ๋ฌธ์ ์๋ค.
์ผ๋จ ์กฐ๊ฑด์์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๊ฒ ๋๋ฉด ๊ทธ๊ฒ์ ์ด๋ค ์์ญ์๋ ์ํ์ง ์๋๋ค๊ณ ํ์๋๋ฐ ์ด ์กฐ๊ฑด์ ์๊ฐํ์ง ๋ชปํด์ ์๊พธ ํ๋ ธ๋ค๊ณ ์ค๋ฅ๊ฐ ๋ฌ๋ค. (ํ ์คํธ ์ผ์ด์ค์์๋ ์ด ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ผ์ด์ค๊ฐ ์์)
๊ทธ๋์ ๋๋๊ฐ ์ฌ๋ฅ์ ์์ํ ๋์ ์์ด ์ฌ๋ฅ์ ์์ํ ๋๋ก ๋๋์ด ์ผ์ด์ค๋ฅผ ๊ตฌ๋ถํ์๋ค.
#(์ธํ๋ฆฌ)๋ฅผ ๋ง๋๋ฉด ์ง๋๊ฐ์ง ๋ชปํ๋ฏ๋ก continue
.์ ๋ง๋๊ฒ ๋๋ค๋ฉด ๋ค์์ผ๋ก ๋์ด ๊ฐ ์ ์์ผ๋ฏ๋ก q์ ์ฝ์ ํด์ฃผ๊ณ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ํ ๋์ด๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ o๋ ์์ ์ธ์ฃผ๋ ๋ณ์๋ฅผ 1์ฆ๊ฐ, v๋ ๋๋๋ฅผ ์ธ์ฃผ๋ ๋ณ์๋ฅผ 1์ฆ๊ฐ ํ์ฌ ๋ต์ ๊ตฌํ์๋ค.
BFS๊ฐ ๋๋๊ฒ ๋๋ฉด ์๊ณผ ๋๋์ ๋ง๋ฆฌ์๋ฅผ ๋น๊ต ํ ๋ ํฐ ๊ฐ์ res์ ์ ์ฅํ๋ค.