๋ฌธ์
์คํํธ๋งํฌ์ ์ฌ๋ฌด์ค์ 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์๋ค. ์ฌ๋ฌด์ค์๋ ์ด K๊ฐ์ CCTV๊ฐ ์ค์น๋์ด์ ธ ์๋๋ฐ, CCTV๋ 5๊ฐ์ง ์ข ๋ฅ๊ฐ ์๋ค. ๊ฐ CCTV๊ฐ ๊ฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
1๋ฒ CCTV๋ ํ ์ชฝ ๋ฐฉํฅ๋ง ๊ฐ์ํ ์ ์๋ค. 2๋ฒ๊ณผ 3๋ฒ์ ๋ ๋ฐฉํฅ์ ๊ฐ์ํ ์ ์๋๋ฐ, 2๋ฒ์ ๊ฐ์ํ๋ ๋ฐฉํฅ์ด ์๋ก ๋ฐ๋๋ฐฉํฅ์ด์ด์ผ ํ๊ณ , 3๋ฒ์ ์ง๊ฐ ๋ฐฉํฅ์ด์ด์ผ ํ๋ค. 4๋ฒ์ ์ธ ๋ฐฉํฅ, 5๋ฒ์ ๋ค ๋ฐฉํฅ์ ๊ฐ์ํ ์ ์๋ค.CCTV๋ ๊ฐ์ํ ์ ์๋ ๋ฐฉํฅ์ ์๋ ์นธ ์ ์ฒด๋ฅผ ๊ฐ์ํ ์ ์๋ค. ์ฌ๋ฌด์ค์๋ ๋ฒฝ์ด ์๋๋ฐ, CCTV๋ ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค. CCTV๊ฐ ๊ฐ์ํ ์ ์๋ ์์ญ์ ์ฌ๊ฐ์ง๋๋ผ๊ณ ํ๋ค.
CCTV๋ ํ์ ์ํฌ ์ ์๋๋ฐ, ํ์ ์ ํญ์ 90๋ ๋ฐฉํฅ์ผ๋ก ํด์ผ ํ๋ฉฐ, ๊ฐ์ํ๋ ค๊ณ ํ๋ ๋ฐฉํฅ์ด ๊ฐ๋ก ๋๋ ์ธ๋ก ๋ฐฉํฅ์ด์ด์ผ ํ๋ค.
0 0 0 0 0 0
0 0 0 0 0 0
0 0 1 0 6 0
0 0 0 0 0 0
์ง๋์์ 0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV์ ๋ฒํธ์ด๋ค. ์์ ์์์์ 1๋ฒ์ ๋ฐฉํฅ์ ๋ฐ๋ผ ๊ฐ์ํ ์ ์๋ ์์ญ์ '#'๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
CCTV๋ ๋ฒฝ์ ํต๊ณผํ ์ ์๊ธฐ ๋๋ฌธ์, 1๋ฒ์ด → ๋ฐฉํฅ์ ๊ฐ์ํ๊ณ ์์ ๋๋ 6์ ์ค๋ฅธ์ชฝ์ ์๋ ์นธ์ ๊ฐ์ํ ์ ์๋ค.0 0 0 0 0 0
0 2 0 0 0 0
0 0 0 0 6 0
0 6 0 0 2 0
0 0 0 0 0 0
0 0 0 0 0 5
์์ ์์์์ ๊ฐ์ํ ์ ์๋ ๋ฐฉํฅ์ ์์๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
CCTV๋ CCTV๋ฅผ ํต๊ณผํ ์ ์๋ค. ์๋ ์์๋ฅผ ๋ณด์.0 0 2 0 3
0 6 0 0 0
0 0 6 6 0
0 0 0 0 0
์์ ๊ฐ์ ๊ฒฝ์ฐ์ 2์ ๋ฐฉํฅ์ด โ 3์ ๋ฐฉํฅ์ด ←์ ↓์ธ ๊ฒฝ์ฐ ๊ฐ์๋ฐ๋ ์์ญ์ ๋ค์๊ณผ ๊ฐ๋ค.
# # 2 # 3
0 6 # 0 #
0 0 6 6 #
0 0 0 0 #
์ฌ๋ฌด์ค์ ํฌ๊ธฐ์ ์ํ, ๊ทธ๋ฆฌ๊ณ CCTV์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, CCTV์ ๋ฐฉํฅ์ ์ ์ ํ ์ ํด์, ์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋ฌด์ค์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ฌ๋ฌด์ค ๊ฐ ์นธ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. 0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV๋ฅผ ๋ํ๋ด๊ณ , ๋ฌธ์ ์์ ์ค๋ช ํ CCTV์ ์ข ๋ฅ์ด๋ค.
CCTV์ ์ต๋ ๊ฐ์๋ 8๊ฐ๋ฅผ ๋์ง ์๋๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
๐ก ํ์ด ๋ฐ ์ฝ๋
from itertools import product
from copy import deepcopy
n, m = map(int, input().split())
data, cctv, count = [], [], 0
for _ in range(n):
data.append(list(map(int, input().split())))
for i in range(n):
for j in range(m):
if data[i][j]:
count += 1
if 1 <= data[i][j] <= 5:
cctv.append((i, j))
dict = {
1: [[0], [1], [2], [3]],
2: [[0, 2], [1, 3]],
3: [[0, 1], [1, 2], [2, 3], [3, 0]],
4: [[0, 1, 2], [1, 2, 3], [2, 3, 0], [3, 0, 1]],
5:[[0, 1, 2, 3]]
}
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
temp, max_cc = [], 0
for x, y in cctv:
temp.append(dict[data[x][y]])
for prod in list(product(*temp)):
cnt = 0
copy_data = deepcopy(data)
for i in range(len(cctv)):
for d in prod[i]:
t, s = cctv[i][0], cctv[i][1]
while 1:
nx, ny = t + dx[d], s + dy[d]
if nx < 0 or nx >= n or ny < 0 or ny >= m or data[nx][ny]==6:
break
if copy_data[nx][ny] == 0:
copy_data[nx][ny] = 7
cnt += 1
t, s = nx, ny
max_cc = max(max_cc, cnt)
print(n * m - count - max_cc)
๋จผ์ CCTV ์ข ๋ฅ๋ณ๋ก ๋น์ถ ์ ์๋ ๋ฐฉํฅ์ ๋์ ๋๋ฆฌ ํํ๋ก ์ ์ํ๋ค. (๋ถ:0, ๋:1, ๋จ:2, ์:3)
itertools ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ product ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ CCTV๊ฐ ๋น์ถ ์ ์๋ ๋ฐฉํฅ์ ์กฐํฉ์ ๊ตฌํ๋ค. ๋ฌธ์ ์์ CCTV์ ์ต๋ ๊ฐ์๊ฐ 8๊ฐ๋ฅผ ๋์ง ์๊ณ n๊ณผ m ๋ํ ์ต๋ 8์ดํ์ด๊ธฐ ๋๋ฌธ์ product๋ฅผ ์ฌ์ฉํด๋ ์๊ฐ ์ ํ์ ๊ฑธ๋ฆฌ์ง ์์ ๊ฒ์ผ๋ก ํ๋จํ๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ ๋๋ ๋ฐ๋ก ์ฌ๊ฐ์ง๋์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ์ง ์๊ณ ๋ชจ๋ CCTV์ ๋ชจ๋ ๋ฐฉํฅ ์กฐํฉ์ ํ์ํ๋ฉฐ ์ฌ๊ฐ์ง๋๊ฐ ์๋(CCTV๋ก ๋น์ถ ์ ์๋) ์นธ์ ๊ฐ์๋ฅผ ์ธ์ด ๊ทธ ์ต๋๊ฐ์ ๊ตฌํ๊ณ , ์ ์ฒด ์นธ์์ ๋ฒฝ, CCTV, CCTV๊ฐ ๋น์ถ๋ ์นธ์ ๋บ ๋๋จธ์ง ์นธ์ ์ฌ๊ฐ์ง๋๋ก ๊ณ์ฐํ์๋ค. ์ฌ๊ฐ์ง๋ ํ์์ ์ํ for๋ฌธ์ ์ค์ด๊ธฐ ์ํด์์๋ค.
'Algorithm > ๐ Baekjoon Judge' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] ๋ฐฑ์ค 1781๋ฒ ์ปต๋ผ๋ฉด - ํ์ด์ฌ(Python) (0) | 2022.07.04 |
---|---|
[BOJ] ๋ฐฑ์ค 8980๋ฒ ํ๋ฐฐ - ํ์ด์ฌ(Python) (0) | 2022.07.04 |
[BOJ] ๋ฐฑ์ค 14499๋ฒ ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ - ํ์ด์ฌ(Python) (0) | 2022.04.02 |
[BOJ] ๋ฐฑ์ค 20055๋ฒ ์ปจ๋ฒ ์ด์ด ๋ฒจํธ ์์ ๋ก๋ด - ํ์ด์ฌ(Python) (0) | 2022.04.01 |
[BOJ] ๋ฐฑ์ค 16234๋ฒ ์ธ๊ตฌ ์ด๋ - ํ์ด์ฌ(Python) (1) | 2022.03.31 |