๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[BAEKJOON python] 15683_๊ฐ์ ๋ณธ๋ฌธ
728x90
๋ฐ์ํ
์คํํธ๋งํฌ์ ์ฌ๋ฌด์ค์ 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ
์ฌ๋ฌด์ค์๋ ์ด K๊ฐ์ CCTV๊ฐ ์ค์น๋์ด์ ธ ์๋๋ฐ, CCTV๋ 5๊ฐ์ง ์ข ๋ฅ
1๋ฒ CCTV๋ ํ ์ชฝ ๋ฐฉํฅ๋ง ๊ฐ์
2๋ฒ๊ณผ 3๋ฒ์ ๋ ๋ฐฉํฅ์ ๊ฐ์ํ ์ ์๋๋ฐ, 2๋ฒ์ ๊ฐ์ํ๋ ๋ฐฉํฅ์ด ์๋ก ๋ฐ๋๋ฐฉํฅ์ด์ด์ผ ํ๊ณ , 3๋ฒ์ ์ง๊ฐ ๋ฐฉํฅ
4๋ฒ์ ์ธ ๋ฐฉํฅ, 5๋ฒ์ ๋ค ๋ฐฉํฅ์ ๊ฐ์
CCTV๋ ๊ฐ์ํ ์ ์๋ ๋ฐฉํฅ์ ์๋ ์นธ ์ ์ฒด๋ฅผ ๊ฐ์ํ ์ ์๋ค.
์ฌ๋ฌด์ค์๋ ๋ฒฝ์ด ์๋๋ฐ, CCTV๋ ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค.
CCTV๊ฐ ๊ฐ์ํ ์ ์๋ ์์ญ์ ์ฌ๊ฐ์ง๋
CCTV๋ ํ์ ์ํฌ ์ ์๋๋ฐ, ํ์ ์ ํญ์ 90๋ ๋ฐฉํฅ์ผ๋ก ํด์ผ ํ๋ฉฐ, ๊ฐ์ํ๋ ค๊ณ ํ๋ ๋ฐฉํฅ์ด ๊ฐ๋ก ๋๋ ์ธ๋ก ๋ฐฉํฅ
0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV์ ๋ฒํธ, ๊ฐ์ํ ์ ์๋ ์์ญ์ '#'
์ฌ๋ฌด์ค์ ํฌ๊ธฐ์ ์ํ, ๊ทธ๋ฆฌ๊ณ CCTV์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, CCTV์ ๋ฐฉํฅ์ ์ ์ ํ ์ ํด์, ์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
์ฒซ์งธ ์ค์ ์ฌ๋ฌด์ค์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ฌ๋ฌด์ค ๊ฐ ์นธ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV
CCTV์ ์ต๋ ๊ฐ์๋ 8๊ฐ๋ฅผ ๋์ง ์๋๋ค.
์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅ์
# 1) DFS (ํ์ - > ๋ณต์ฌ)
import copy
# ์ธ๋ก, ๊ฐ๋ก
N, M = map(int, input().split())
# cctv ์ข
๋ฅ, x, y ์ขํ
cctv = []
# ์ฌ๋ฌด์ค ๋ฐฐ์น
graph = []
# cctv ์ด๋๊ฒฝ๋ก
move = [
[],
[[0], [1], [2], [3]],
[[0, 2], [1, 3]],
[[0, 1], [1, 2], [2, 3], [3, 0]],
[[0, 1, 2], [1, 2, 3], [2, 3, 0], [3, 0, 1]],
[[0, 1, 2, 3]]
]
# ๋ถ ๋ ๋จ ์
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
for i in range(N) :
data = list(map(int, input().split()))
graph.append(data)
for j in range(M) :
if data[j] in [1, 2, 3, 4, 5] :
# cctv ์ข
๋ฅ, x, y ์ขํ
cctv.append([data[j], i, j])
def check(graph, move, x, y) :
for i in move :
nx = x
ny = y
while True :
nx += dx[i]
ny += dy[i]
# ๋ฒ์ ๋ฒ์ด๋จ
if 0 > nx or 0 > ny or nx >= N or ny >= M :
break
# ๋ฒฝ
if graph[nx][ny] == 6 :
break
# ๊ฐ์
elif graph[nx][ny] == 0 :
graph[nx][ny] -= -1
def dfs(d, graph) :
global min_value
if d == len(cctv) :
count = 0
for i in range(N) :
count += graph[i].count(0)
min_value = min(min_value, count)
return
temp = copy.deepcopy(graph)
cctv_n, x, y = cctv[d]
for i in move[cctv_n] :
check(temp, i, x, y)
dfs(d + 1, temp)
temp = copy.deepcopy(graph)
min_value = int(1e9)
dfs(0, graph)
print(min_value)
๊ฐ์
์คํํธ๋งํฌ์ ์ฌ๋ฌด์ค์ 1×1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ N×M ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ
์ฌ๋ฌด์ค์๋ ์ด K๊ฐ์ CCTV๊ฐ ์ค์น๋์ด์ ธ ์๋๋ฐ, CCTV๋ 5๊ฐ์ง ์ข
๋ฅ
1๋ฒ CCTV๋ ํ ์ชฝ ๋ฐฉํฅ๋ง ๊ฐ์
2๋ฒ๊ณผ 3๋ฒ์ ๋ ๋ฐฉํฅ์ ๊ฐ์ํ ์ ์๋๋ฐ, 2๋ฒ์ ๊ฐ์ํ๋ ๋ฐฉํฅ์ด ์๋ก ๋ฐ๋๋ฐฉํฅ์ด์ด์ผ ํ๊ณ , 3๋ฒ์ ์ง๊ฐ ๋ฐฉํฅ
4๋ฒ์ ์ธ ๋ฐฉํฅ, 5๋ฒ์ ๋ค ๋ฐฉํฅ์ ๊ฐ์
CCTV๋ ๊ฐ์ํ ์ ์๋ ๋ฐฉํฅ์ ์๋ ์นธ ์ ์ฒด๋ฅผ ๊ฐ์ํ ์ ์๋ค.
์ฌ๋ฌด์ค์๋ ๋ฒฝ์ด ์๋๋ฐ, CCTV๋ ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค.
CCTV๊ฐ ๊ฐ์ํ ์ ์๋ ์์ญ์ ์ฌ๊ฐ์ง๋
CCTV๋ ํ์ ์ํฌ ์ ์๋๋ฐ, ํ์ ์ ํญ์ 90๋ ๋ฐฉํฅ์ผ๋ก ํด์ผ ํ๋ฉฐ, ๊ฐ์ํ๋ ค๊ณ ํ๋ ๋ฐฉํฅ์ด ๊ฐ๋ก ๋๋ ์ธ๋ก ๋ฐฉํฅ
0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV์ ๋ฒํธ, ๊ฐ์ํ ์ ์๋ ์์ญ์ '#'
์ฌ๋ฌด์ค์ ํฌ๊ธฐ์ ์ํ, ๊ทธ๋ฆฌ๊ณ CCTV์ ์ ๋ณด๊ฐ ์ฃผ์ด์ก์ ๋, CCTV์ ๋ฐฉํฅ์ ์ ์ ํ ์ ํด์, ์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ
์ฒซ์งธ ์ค์ ์ฌ๋ฌด์ค์ ์ธ๋ก ํฌ๊ธฐ N๊ณผ ๊ฐ๋ก ํฌ๊ธฐ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ N, M ≤ 8)
๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ฌ๋ฌด์ค ๊ฐ ์นธ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค.
0์ ๋น ์นธ, 6์ ๋ฒฝ, 1~5๋ CCTV
CCTV์ ์ต๋ ๊ฐ์๋ 8๊ฐ๋ฅผ ๋์ง ์๋๋ค.
์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅ
728x90
๋ฐ์ํ
'๐ฆฅ ์ฝํ > BAEKJOON' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON python] 15685_๋๋๊ณค ์ปค๋ธ (0) | 2022.10.14 |
---|---|
[BAEKJOON python] 15684_์ฌ๋ค๋ฆฌ ์กฐ์ (0) | 2022.10.13 |
[BAEKJOON python] 14891_ํฑ๋๋ฐํด (0) | 2022.10.13 |
[BAEKJOON python] 14890_ ๊ฒฝ์ฌ๋ก (0) | 2022.10.12 |
[BAEKJOON python] 14503_๋ก๋ด ์ฒญ์๊ธฐ (1) | 2022.10.11 |
Comments