๐๋ฌธ์
https://www.acmicpc.net/problem/14502
๐์๊ณ ๋ฆฌ์ฆ ๋ฐ ์ ๊ทผ
bfs, ๋ฐฑํธ๋ํน
1. ๋ฒฝ์ ์ข ๋ ํจ๊ณผ์ ์ผ๋ก ์ธ์ธ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด ์์์ง ์๊ฐํด๋ณธ๋ค.
2 . ์์ผ๋ฉด ๋ฒฝ์ ์ผ์ผ์ด ์ธ์๋ณด๋ฉฐ ์ด๋์ ์ธ์ ์ ๋ ์์ ์์ญ์ด ๊ฐ์ฅ ํด์ง ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณด์์ผ ํ๋ค.
3. ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ง ๋๋ ํ์ด์ฌ ๋ด์ฅํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฒ๊ณผ ๋ฐฑํธ๋ํน์ด ์๋๋ฐ, ์กฐ๊ฑด์ด ๊น๋ค๋ก์ด ๊ฒฝ์ฐ ๋ฐฑํธ๋ํน์ ์ฌ์ฉํ๋ค.
4. ๋ฐฑํธ๋ํน์ ์ฌ์ฉํด ๋น ์์ญ๋ง๋ค ๋ฒฝ์ ์ธ์๋ณด๋ฉฐ ์์ ์์ญ์ด ์ผ๋ง๋ ๋จ๋์ง bfs()๋ฅผ ๋๋ ค๋ณธ๋ค.
5. bfs๋ฅผ ์ฌ์ฉํด๋ ๋๊ณ , dfs๋ฅผ ์ฌ์ฉํด๋ ๋์ง๋ง, bfs๋ฅผ ์ ํธํด์ ์ฌ์ฉํ๋ค.
6. bfs ํจ์ ๋ด์์ ๋ฐ์ด๋ฌ์ค๋ฅผ ํผํธ๋ฆฌ๊ณ ๋์์ ํผํธ๋ฆด ๋๋ง๋ค cnt += 1 ํด์ฃผ๋ฉฐ ํผํธ๋ฆฐ ์์ญ์ ๊ฐ์๋ฅผ ์ธ์ด์ค๋ค.
7. bfs๋ฅผ ๋๋ฆฌ๊ณ ๋ ๋ค(๋ฐ์ด๋ฌ์ค๋ฅผ ํผํธ๋ฆฌ๊ณ ๋ ๋ค)์ ์์ ์์ญ = ํผํธ๋ฆฌ๊ธฐ ์ ์์ ์์ญ(safe_area) - ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์์ญ(cnt) - 3(๋ฒฝ 3๊ฐ)
8. bfs๋ฅผ ๋๋ฆฌ๊ณ ๋ ๋ค์ ์์ ์์ญ์ ๊ธฐ์กด์ ๊ฐ(answer)๊ณผ ๋น๊ตํ์ฌ ๊ฐ์ฅ ๋์ ์์ญ์ ๊ฐ์ ์ ์ฅํ๋ค.
๐ป์ฝ๋
# 14502 ์ฐ๊ตฌ์
from collections import deque
# ๋ฒฝ์ธ์ฐ๋ ํจ์, ๋ฐฑํธ๋ํน
def makeWall(cnt):
global answer
if cnt == 3:
answer = max(answer,bfs())
return
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
graph[i][j] = 1
makeWall(cnt+1)
graph[i][j] = 0
# bfs
def bfs():
temp = [t[:] for t in graph] # graph ๋ณต์ฌ
deq = deque()
dx = [0,0,-1,1]
dy = [-1,1,0,0]
for i in range(n): # 2(๋ฐ์ด๋ฌ์ค)์ ์์น ์ ๋ณด ์์ง
for j in range(m):
if temp[i][j] == 2:
deq.append([i,j])
cnt = 0 # ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์์ญ์ ๊ฐ์
while deq: # bfs๋๋ ค์ ๋ฐ์ด๋ฌ์ค ํผํธ๋ฆฌ๋ฉด์ ํผํธ๋ฆฐ ๋ฉด์ ๊ณ์ฐ
x,y = deq.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
continue
if temp[nx][ny] == 0:
temp[nx][ny] = 2
cnt += 1
deq.append([nx,ny])
# ๋จ์ safe_area ๊ฐ์ ๋ฐํ
return safe_area-cnt-3 # ์ฒ์ safe_area์ ๋ฉด์ - ๋ฐ์ด๋ฌ์ค ํผ์ง ๋ฉด์ - ๋ฒฝ 3๊ฐ
# ์
๋ ฅ ๋ฐ๊ธฐ
n,m = map(int,input().split())
graph = [list(map(int,input().split())) for _ in range(n)]
# ์ฒ์ safe_area์ ๊ฐ์
safe_area = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
safe_area += 1
# ๋ฒฝ ์ธ์ฐ๊ณ ์์ ์์ญ ํฌ๊ธฐ ํ์ธํ๊ธฐ
answer = 0
makeWall(0)
print(answer)
๐์ฝ๋ ์ค๋ช
์ฃผ์๊ณผ ์์ ์ค๋ช ์ผ๋ก ๋์ฒดํ๋ค.
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 14891 ํฑ๋๋ฐํด (ํ์ด์ฌ/python) (1) | 2023.10.09 |
---|---|
[๋ฐฑ์ค] 1459 ๊ฑท๊ธฐ (ํ์ด์ฌ/python) (0) | 2023.10.03 |
[๋ฐฑ์ค] 8978 ์ฌ๋ฆผํฝ (ํ์ด์ฌ/python) (0) | 2023.09.18 |
[๋ฐฑ์ค] 1083 ์ํธ(ํ์ด์ฌ/python) (1) | 2023.08.27 |
[๋ฐฑ์ค] 2531 ํ์ ์ด๋ฐฅ(ํ์ด์ฌ/python) (0) | 2023.08.23 |