๐ข ๊ฐ์
1. ๋ฌธ์ ๋งํฌ
2. ์ฝ๋
Python3
31708KB
2852ms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
"""
[15683] ๊ฐ์
๐ ๋ฌธ์
์คํํธ๋งํฌ์ ์ฌ๋ฌด์ค์ 1ร1ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ์ผ๋ก ๋๋์ด์ ธ ์๋ NรM ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ์ผ๋ก ๋ํ๋ผ ์ ์๋ค.
์ฌ๋ฌด์ค์๋ ์ด K๊ฐ์ CCTV๊ฐ ์ค์น๋์ด์ ธ ์๋๋ฐ, CCTV๋ 5๊ฐ์ง ์ข
๋ฅ๊ฐ ์๋ค
๊ฐ CCTV๊ฐ ๊ฐ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
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์ ์ข
๋ฅ์ด๋ค.
CCTV์ ์ต๋ ๊ฐ์๋ 8๊ฐ๋ฅผ ๋์ง ์๋๋ค.
๐ ์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๊ฐ ์ง๋์ ์ต์ ํฌ๊ธฐ๋ฅผ ์ถ๋ ฅํ๋ค.
"""
import copy
# move = [
# [],
# [(0, 1), (0, -1), (1, 0), (-1, 0)],
# [[(0, 1), (0, -1)], [(1, 0), (-1, 0)]],
# [[(0, 1), (-1, 0)], [(0, 1), (1, 0)], [(0, -1), (1, 0)], [(0, -1), (-1, 0)]],
# [[(0, 1), (0, -1), (-1, 0)], [(0, 1), (-1, 0), (1, 0)],
# [(0, 1), (0, -1), (1, 0)], [(0, -1), (-1, 0), (1, 0)]],
# [(0, 1), (0, -1), (1, 0), (-1, 0)]
# ]
# ์ธ๋ก, ๊ฐ๋ก
n, m = map(int, input().split())
# 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]
cctv = []
office = []
# ์ฌ๋ฌด์ค ๊ฐ ์นธ์ ์ ๋ณด
for i in range(n):
# [[0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 6, 0], [0, 0, 0, 0, 0, 0]]
office.append(list(map(int, input().split())))
for j in range(m):
if office[i][j] in [1, 2, 3, 4, 5]:
# cctv ์ข
๋ฅ, x, y ์ขํ
# [[1, 2, 2]]
cctv.append([office[i][j], i, j])
# 4๋ฐฉํฅ์ ๋น์นธ ์๋์ง
# office ์ ๋ณด, cctv ๋ฐฉํฅ ์ ๋ณด(list ๋ก ์ฃผ์ด์ง), cctv ์์น
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
# cctv ๊ฐ์ ๋งํผ ๊ตฌํ
def dfs(d, graph):
global min_value
# ๊ณ์ ์ฆ๊ฐํ๋ฉฐ ํ์ธํ๋ cctv๋ฅผ ๋๊น์ง ํ์ ๋
if d == len(cctv):
cnt = 0
for i in range(n):
# ๊ฐ์ ๋ชปํ ๋น ๊ณต๊ฐ 0 ๋ง ์ธ๊ธฐ
cnt += graph[i].count(0)
min_value = min(min_value, cnt)
return
temp = copy.deepcopy(graph)
# cctv ๋ฒํธ, cctv ์์น
cctv_num, x, y = cctv[d]
for i in move[cctv_num]:
check(temp, i, x, y)
# ๋ค์ cctv๋ก ๋์ด๊ฐ๊ณ , cctv ์ ๋ณด ๊ฐฑ์ & ๋๋ฌ์ผ๋ฉด return
dfs(d + 1, temp)
temp = copy.deepcopy(graph)
# ์ต๋๊ฐ ํด์ ์ต์ ์ ๋ง๋ค๊ธฐ
min_value = int(1e9)
dfs(0, office)
print(min_value)
3. ํด์ค
- ์ด๋ ๊ฒฝ๋ก๋ฅผ ์ซ์๋ก ์ง์ ํ๋ค. ํท๊ฐ๋ ธ๋ค.. ์ฒ์์ ์ขํ๋ก ํ๋ค๊ฐ ๋์ค์ ๋ค์์ ์ฝ๋๊ฐ ๋๋ฌด ์ง์ ธ๋ถํด์ ๋ฐ๊ฟจ๋ค
- ๊ฐ์๋ ๊ณณ์ด ์๋ ๊ฐ์๋์ง ์์ ๊ณณ์ ์ฐพ๋ ๊ณณ์ด๋ผ 0๋ง count ๋๊ฒ ํ์๋ค. count(0) ์ด๋ผ๋ ์น๊ตฌ๋ฅผ ๋ค์ ์๊ธฐ์ํค๋ฉฐ ์ต์๊ฐ์ ์ฐพ์๋ค.
- ํจ์์ ๋ฆฌํด์ ๋ญ๋ก ํด์ผ๋๋์ง, ๋งค๊ฐ๋ณ์๋ ๋ญ๋ก ํด์ผ๋๋์ง ์ ๊ฒฝ์ ์ข ์จ์ผ ํ์๋ค.
This post is licensed under CC BY 4.0 by the author.