[๋ฐฑ์ค/python] 14502๋ฒ : ์ฐ๊ตฌ์
๋ฌธ์
์ธ์ฒด์ ์น๋ช ์ ์ธ ๋ฐ์ด๋ฌ์ค๋ฅผ ์ฐ๊ตฌํ๋ ์ฐ๊ตฌ์์์ ๋ฐ์ด๋ฌ์ค๊ฐ ์ ์ถ๋์๋ค. ๋คํํ ๋ฐ์ด๋ฌ์ค๋ ์์ง ํผ์ง์ง ์์๊ณ , ๋ฐ์ด๋ฌ์ค์ ํ์ฐ์ ๋ง๊ธฐ ์ํด์ ์ฐ๊ตฌ์์ ๋ฒฝ์ ์ธ์ฐ๋ ค๊ณ ํ๋ค.
์ฐ๊ตฌ์๋ ํฌ๊ธฐ๊ฐ 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๊ฐ ์ด์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ป์ ์ ์๋ ์์ ์์ญ์ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ต
from itertools import combinations
from copy import deepcopy
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)] # 0: ๋น์นธ, 1: ๋ฒฝ, 2: ๋ฐ์ด๋ฌ์ค
answer = 0
dir = [(-1,0), (0, -1), (1,0), (0,1)]
empty, virus = set(), set()
for x in range(N):
for y in range(M):
if arr[x][y] == 0:
empty.add((x, y))
if arr[x][y] == 2:
virus.add((x,y))
for space in combinations(empty, 3):
_arr = deepcopy(arr)
for i, j in space:
_arr[i][j] = 1
_virus = deepcopy(virus)
while _virus:
x, y = _virus.pop()
for d in dir:
_x, _y = x+d[0], y+d[1]
if 0 <= _x < N and 0 <= _y < M and _arr[_x][_y] == 0:
_virus.add((_x, _y))
_arr[_x][_y] = 2
cnt = 0
for x in range(N):
for y in range(M):
if _arr[x][y] == 0:
cnt += 1
answer = max(answer, cnt)
print(answer)
๋น์นธ์ธ ์ํ ์ฆ, 0์ธ ์์น๋ฅผ empry์ ์ ์ฅํ๊ณ
๋ฐ์ด๋ฌ์ค ์ํ ์ฆ, 2์ธ ์์น๋ฅผ virus์ ์ ์ฅํ๋ค.
combinations๋ฅผ ์ด์ฉํ์ฌ 3๊ฐ์ฉ ๋ฝ์ ๋ฒฝ์ ์ธ์ฐ๊ณ
virus ์ํ์ธ ์นธ์ ์ํ์ข์ฐ๋ก ๋ฐ์ด๋ฌ์ค๋ฅผ ํผํธ๋ฆฐ๋ค.
ํผ์ง ์นธ ๋ํ ๋ฐฐ์ด์ ์ถ๊ฐํ์ฌ ํด๋น ์นธ์ ์ํ์ข์ฐ๋ ์ดํ ์ ์๋๋ก ํ๋ค.
virus๋ฅผ ๋ชจ๋ ํผํธ๋ฆฐ ํ ๋น์นธ 0์ธ ์์น๋ฅผ ์ธ์ด answer์ ๋น๊ตํ๋ค.
๐ฅ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ๋ณต์ฌํ ๋๋ deepcopy๋ฅผ ์ด์ฉํ๊ธฐ !
๐ฅ ๊ฐ์ ๋ฐ๊ฟ ๋๋ == ์ด ์๋ = !!
'๐์๊ณ ๋ฆฌ์ฆ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/python] 14503๋ฒ : ๋ก๋ด ์ฒญ์๊ธฐ (0) | 2021.10.06 |
---|---|
[๋ฐฑ์ค/python] 19238๋ฒ : ์คํํธ ํ์ (0) | 2021.09.22 |
[๋ฐฑ์ค/python] 11660๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ 5 (0) | 2021.09.20 |
[๋ฐฑ์ค/python] 17779๋ฒ : ๊ฒ๋ฆฌ๋งจ๋๋ง 2 (0) | 2021.09.18 |
[๋ฐฑ์ค/python] 7490๋ฒ : 0 ๋ง๋ค๊ธฐ (0) | 2021.09.17 |