๐ ์ฐ๊ตฌ์
๋ฌธ์
์ธ์ฒด์ ์น๋ช ์ ์ธ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ฐ๊ตฌํ๋ ์ฐ๊ตฌ์์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ๋์๋ค. ๋คํํ ๋ฐ์ด๋ฌ์ค๋ ์์ง ํผ์ง์ง ์์๊ณ , ๋ฐ์ด๋ฌ์ค์ ํ์ฐ์ ๋ง๊ธฐ ์ํด์ ์ฐ๊ตฌ์์ ๋ฒฝ์ ์ธ์ฐ๋ ค๊ณ ํ๋ค.
์ฐ๊ตฌ์๋ ํฌ๊ธฐ๊ฐ N×M์ธ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์์ผ๋ฉฐ, ์ง์ฌ๊ฐํ์ 1×1 ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ค. ์ฐ๊ตฌ์๋ ๋น ์นธ, ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๋ฒฝ์ ์นธ ํ๋๋ฅผ ๊ฐ๋ ์ฐจ์งํ๋ค.
์ผ๋ถ ์นธ์ ๋ฐ์ด๋ฌ์ค๊ฐ ์กด์ฌํ๋ฉฐ, ์ด ๋ฐ์ด๋ฌ์ค๋ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋น ์นธ์ผ๋ก ๋ชจ๋ ํผ์ ธ๋๊ฐ ์ ์๋ค. ์๋ก ์ธ์ธ ์ ์๋ ๋ฒฝ์ ๊ฐ์๋ 3๊ฐ์ด๋ฉฐ, ๊ผญ 3๊ฐ๋ฅผ ์ธ์์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ด ์ฐ๊ตฌ์๊ฐ ์๊ธด ๊ฒฝ์ฐ๋ฅผ ์ดํด๋ณด์.
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
์ด๋, 0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ๊ณณ์ด๋ค. ์๋ฌด๋ฐ ๋ฒฝ์ ์ธ์ฐ์ง ์๋๋ค๋ฉด, ๋ฐ์ด๋ฌ์ค๋ ๋ชจ๋ ๋น ์นธ์ผ๋ก ํผ์ ธ๋๊ฐ ์ ์๋ค.
2ํ 1์ด, 1ํ 2์ด, 4ํ 6์ด์ ๋ฒฝ์ ์ธ์ด๋ค๋ฉด ์ง๋์ ๋ชจ์์ ์๋์ ๊ฐ์์ง๊ฒ ๋๋ค.
2 1 0 0 1 1 0
1 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 1 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ๋ค์ ๋ชจ์ต์ ์๋์ ๊ฐ์์ง๋ค.
2 1 0 0 1 1 2
1 0 1 0 1 2 2
0 1 1 0 1 2 2
0 1 0 0 0 1 2
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
๋ฒฝ์ 3๊ฐ ์ธ์ด ๋ค, ๋ฐ์ด๋ฌ์ค๊ฐ ํผ์ง ์ ์๋ ๊ณณ์ ์์ ์์ญ์ด๋ผ๊ณ ํ๋ค. ์์ ์ง๋์์ ์์ ์์ญ์ ํฌ๊ธฐ๋ 27์ด๋ค.
์ฐ๊ตฌ์์ ์ง๋๊ฐ ์ฃผ์ด์ก์ ๋ ์ป์ ์ ์๋ ์์ ์์ญ ํฌ๊ธฐ์ ์ต๋๊ฐ์ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ง๋์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (3 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ์ง๋์ ๋ชจ์์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ, 1์ ๋ฒฝ, 2๋ ๋ฐ์ด๋ฌ์ค๊ฐ ์๋ ์์น์ด๋ค. 2์ ๊ฐ์๋ 2๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , 10๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
๋น ์นธ์ ๊ฐ์๋ 3๊ฐ ์ด์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ป์ ์ ์๋ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1 ๋ณต์ฌ
7 7
2 0 0 0 1 1 0
0 0 1 0 1 2 0
0 1 1 0 1 0 0
0 1 0 0 0 0 0
0 0 0 0 0 1 1
0 1 0 0 0 0 0
0 1 0 0 0 0 0
์์ ์ถ๋ ฅ 1 ๋ณต์ฌ
27
์์ ์ ๋ ฅ 2 ๋ณต์ฌ
4 6
0 0 0 0 0 0
1 0 0 0 0 2
1 1 1 0 0 2
0 0 0 0 0 2
์์ ์ถ๋ ฅ 2 ๋ณต์ฌ
9
์์ ์ ๋ ฅ 3 ๋ณต์ฌ
8 8
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
2 0 0 0 0 0 0 2
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
์์ ์ถ๋ ฅ 3 ๋ณต์ฌ
3
โ ์ ๊ทผ
- ๊ผญ 3๊ฐ๋ผ๋ ๋ง + N๊ณผ M์ด ํฌ์ง ์๋ค๋ ์ ์์ ์กฐํฉ์ ์๊ฐํ๋ค
- ์กฐํฉ์ ๋ฐํ์ผ๋ก ํ๋ํ๋ ๋ถ๋ฃจํธํฌ์ค ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด BFS๋ก ํ์ํ๋๋ก ํ๋ค
์ ๋ต์ฝ๋
# โจ ์
๋ ฅ
import sys
from collections import deque
from itertools import combinations
import copy
input = sys.stdin.readline
N,M = map(int,input().split())
board = [list(map(int,input().split())) for _ in range(N)]
# โจ ์ค๋น 1
safe_zone = []
virus = []
res = 0
dx = [-1,0,1,0]
dy = [0,-1,0,1]
# โจ BFS
def BFS():
global res
cnt = len(safe_zone)-3
ch_virus = deque([])
for x,y in virus:
ch_virus.append((x,y))
while ch_virus:
xx,yy = ch_virus.popleft()
for i in range(4):
nx = xx + dx[i]
ny = yy + dy[i]
if 0<=nx<N and 0<=ny<M and ch_board[nx][ny] == 0:
ch_board[nx][ny] = 2
ch_virus.append((nx,ny))
cnt-=1
res = max(res,cnt)
# โจ ์ค๋น 2
for i in range(N):
for j in range(M):
if board[i][j] == 0:
safe_zone.append((i,j))
elif board[i][j] == 2:
virus.append((i,j))
# โจ ์กฐํฉ
for comb in combinations(safe_zone,3):
ch_board = copy.deepcopy(board)
for x,y in comb:
ch_board[x][y] = 1
BFS()
print(res)
ํด์ค
์ ๋ ฅ
- ๋ฌธ์ ์์ ๋์จ ๊ฐ์ ์ ๋ ฅ๋ฐ๋๋ค
์ค๋น 1, ์ค๋น 2
- board๋ฅผ ๋๋ฉด์ 0์ผ ๊ฒฝ์ฐ safe_zone์ append,
- 2์ผ ๊ฒฝ์ฐ virus์ appendํ๋ค
์กฐํฉ
- combinations๋ฅผ ์ด์ฉํด์ 3๊ฐ์ฉ ์กฐํฉํด์ค๋ค
ํ ์กฐํฉ๋น ch_board๋ผ๋ board๋ฅผ deepcopyํ ์นดํผ๋ณธ์ ๋ง๋ จํด์ฃผ๊ณ , - ์๋กญ๊ฒ ์๊ธด 3๊ฐ์ ๋ฒฝ์ ์ธ์์ฃผ๊ณ
- BFS๋ฅผ ๋๋ฆฐ๋ค
BFS
- safe_zone์ ๊ธธ์ด -3 (๋ฒฝ์ 3๊ฐ ์ธ์ฐ๋๊น) ์ ํ๊ณ
- ch_virus๋ฅผ ๋ง๋ ๋ค(์ฌ๊ธฐ์ ๊ณ ์)
virus ์์น๋ฅผ ๊ฑด๋ค์ง ์๊ณ ๊ฐ๊ฐ ๋ค๋ฅธ ch_board๋ฅผ ํ์ํ๋ ค๋ฉด virus ์์น๋ ์ฒ์์ ์๋ ์์น๋ก ๊ณ ์ ํด๋์ด์ผ ํ๋ค - ๋๋จธ์ง๋ ์ํ์ข์ฐ๋ฅผ ํ์ํ๊ณ ch_board๊ฐ ๋น์ด์์ ๊ฒฝ์ฐ appendํ๋ฉฐ ๋๊น์ง ํ์ํ๋ฉด ๋๋ค