๋ฌธ์
https://www.acmicpc.net/problem/14502
๋ด ๋ฌธ์ ํ์ด
import copy
n, m = map(int, input().split())
space = [] # ๋ฌธ์ ์์ ์ฃผ์ด์ง ์ง๋
virusSpace = [] # ๋ฐ์ด๋ฌ์ค์ ์์น
""" ์
๋ ฅ """
for i in range(n):
space.append(list(map(lambda x: int(x), input().split())))
for j in range(m):
if space[i][j] == 2:
virusSpace.append((i, j))
check = copy.deepcopy(space)
result = 0
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
""" ๋ฐ์ด๋ฌ์ค ์ ํ """
def dfs(x, y, check):
if check[x][y] == 2:
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= m: continue
if check[nx][ny] == 0:
check[nx][ny] = 2
dfs(nx, ny, check)
""" ๋ฒฝ ์ธ์ฐ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์ ํ์ """
def makeWall(start, count):
global result
safe_count = 0
if count == 3:
check = copy.deepcopy(space)
for i in virusSpace:
dfs(i[0], i[1], check)
for i in range(n):
safe_count += check[i].count(0)
result = max(result, safe_count)
return
else:
for i in range(start, n*m):
x = i // m
y = i % m
if space[x][y] == 0:
space[x][y] = 1
makeWall(i, count+1)
space[x][y] = 0
makeWall(0, 0)
print(result)
๐ ๋ธ๋ฃจํธํฌ์ค/DFS ๋ฌธ์ ๋ก, ๋ฒฝ์ ์ธ์ฐ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๊ณ , ๊ฒฝ์ฐ๋ง๋ค ๋ฐ์ด๋ฌ์ค๊ฐ ์ ํ๋๋ ๊ฒ์ ์ฒดํฌํด์ฃผ์๋ค.
- makeWall ํจ์๋ฅผ ๋ณด๋ฉด, ๋ฒฝ์ ์ด 3๊ฐ ์ธ์์ผ ํ๋ฏ๋ก count๊ฐ 3์ด ๋๊ธฐ ์ ๊น์ง ๋ฒฝ์ ์ธ์ ๋ค.
else ์กฐ๊ฑด๋ฌธ์ for๋ฌธ์ ํตํด ์ง๋์ ๋ชจ๋ ์๋ฆฌ๋ฅผ ํ์ํด์ฃผ์๋๋ฐ,
์๋ฆฌ๊ฐ 0์ธ ๊ณณ์ ๋ฐ๊ฒฌํ๋ฉด ๋ฒฝ์ ์ธ์ด ํ makeWall์ ์ฌ๊ทํธ์ถํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค.
์ฌ๊ทํธ์ถํ ๋๋ ํ์ ์์ ์ ์ i๋ก ํด์ฃผ๊ณ , count๋ฅผ ์ฆ๊ฐ์์ผ์ฃผ์๊ณ ,
ํธ์ถ์ด ๋๋๋ฉด ๋ฒฝ์ ์ธ์ ๋ ์๋ฆฌ๋ ๋ค์ 0์ ์ ์ฅํ์ฌ ๋ณต๊ตฌ์์ผฐ๋ค.
count๊ฐ 3์ด ๋์์ ๋๋ 3๊ฐ์ ๋ฒฝ์ ์ธ์ด space ๋ฆฌ์คํธ๋ฅผ check์ ๋ฃ๊ณ ,
๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋์ virusSpace ๋ฆฌ์คํธ๋ฅผ ๋๋ฉฐ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ๋ง๋ค๋ฅผ
์์์ ์ผ๋ก ์๊ฐํ์ฌ dfs ํจ์๋ฅผ ํธ์ถํด์ฃผ์๋ค.
dfs ํจ์ ์คํ์ด ์ข ๋ฃ๋๋ฉด 0์ ๊ฐ์๋ฅผ ์ธ๊ณ , result์ ๋น๊ตํด์ ํฐ ๊ฐ์ ์ ์ฅํ๋ค. - dfs ํจ์๋ ํ๋ผ๋ฏธํฐ๋ก ์
๋ ฅ๋ฐ์ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฐ์ด๋ฌ์ค๋ฅผ ์ ํ์ํค๋ ํจ์์ด๋ค.
๋ฐ์ด๋ฌ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ๋ฅผ ํ์ํ๊ณ , ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ์ฌ
0์ด ์ ์ฅ๋ ์๋ฆฌ๋ฅผ 2๋ก ๋ฐ๊ฟ์ฃผ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ฆฌ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฃ์ด dfs๋ฅผ ์ฌ๊ทํธ์ถํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์ด๋ ต์ง ์์ ๋ฌธ์ ์์ง๋ง ์์ ํ ํ์ด์ฌ์ด๋ผ ํธ๋๋ฐ ์ค๋๊ฑธ๋ ธ๋ค.
์ผ๋จ ๋๋ deepcopy๋ฅผ ๋ชฐ๋ผ์ ๊ทธ๊ฑธ ํด๊ฒฐํ๋๋ฐ์ ์์ฃผ ์ค๋๊ฑธ๋ ธ๋ค.
๊ณต๋ถ๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค.
'4๏ธโฃ Python > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python Algorithm] ์ฌ์ ๊ฐ์ BOJ #4963 (0) | 2022.01.30 |
---|---|
[Python Algorithm] ํ ๋งํ BOJ #7576 (0) | 2022.01.30 |
[Python Algorithm] ์ฐ๊ฒฐ ์์์ ๊ฐ์ BOJ #11724 (0) | 2022.01.29 |
[Python Algorithm] ๋ฐ์ด๋ฌ์ค BOJ #2606 (0) | 2022.01.28 |
[Python Algorithm] ์ ๊ธฐ๋ ๋ฐฐ์ถ BOJ #1012 (0) | 2022.01.27 |
๋๊ธ