ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
์ฐ๊ตฌ์ ์๋ฆฌ์ฆ
๋ฌธ์
๋ฌธ์ ํ์ด
์ฐ๊ตฌ์ค์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ๋์๊ณ , ๋ฒฝ์ 3๊ฐ ์ค์นํ ์ ์์ ๋ ๊ฐ์ฅ ๋ง์ ์์ ์ง๋๋ฅผ ํ๋ณดํ ๊ฒฝ์ฐ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด์๋ FloodFill๊ณผ ๊ฐ์ด ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์ง์ ์ผ๋ก๋ถํฐ ์, ํ, ์ข, ์ฐ๋ก ์ ํ๊ฐ ๊ฐ๋ฅํ์ง ํ์ธํ์ฌ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ํ๋ ๊ฒ์ด๋ค. ํ ๋งํ ๋ฌธ์ ์ ์ ์ฌํ์ง๋ง ๋ค๋ฅธ ์ ์ ๋ฒฝ์ ์ธ์์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐ ํ ์ ์๋ค.
- ๋ฐฑํธ๋ํน์ ํตํด 3๊ฐ์ ๋ฒฝ์ ์ธ์ฐ๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฐพ๋๋ค.
- ๊ฐ ๊ฒฝ์ฐ์ ์๋ง๋ค, ๋ฐ์ด๋ฌ์ค๋ฅผ ์ ํ์ํค๊ณ ์์ ์ง์ญ์ ์๋ฅผ ๊ณ์ฐํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
from copy import deepcopy
def visitable(x, y, set_wall):
return 0 <= x < n and 0 <= y < m and not set_wall[x][y]
def bfs():
set_wall = deepcopy(graph)
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
q = deque()
for x in range(n):
for y in range(m):
if set_wall[x][y] == 2:
q.append([x, y])
while q:
cur_x, cur_y = q.popleft()
for x, y in dirs:
next_x, next_y = cur_x + x, cur_y + y
if visitable(next_x, next_y, set_wall):
set_wall[next_x][next_y] = 2
q.append([next_x, next_y])
cnt = 0
for is_virus in set_wall:
cnt += is_virus.count(0)
return cnt
def dfs(select):
global answer
if select == 3:
answer = max(answer, bfs())
return
for x in range(n):
for y in range(m):
if not graph[x][y]:
graph[x][y] = 1
dfs(select + 1)
graph[x][y] = 0
if __name__ == '__main__':
answer = 0
n, m = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(n)]
dfs(0)
print(answer)
๋๋ฆฐ ํ์ด์ฌ์ผ๋ก๋ ์๊ฐ ์ด๋ด์ ํต๊ณผํ ์ ์๋ค. ๋ฐ๋ผ์ PyPy3๋ก ์ ์ถํ์ฌ์ผ ํ๋ค.
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 14442 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2 (0) | 2020.08.03 |
---|---|
๋ฐฑ์ค: 2206 ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ (0) | 2020.08.03 |
๋ฐฑ์ค: 16948 ๋ฐ์ค ๋์ดํธ (0) | 2020.08.02 |
๋ฐฑ์ค: 9663 N-Queen (0) | 2020.08.01 |
๋ฐฑ์ค: 14225 ๋ถ๋ถ์์ด์ ํฉ (0) | 2020.07.31 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ