Skip to content

Commit ab6f9d1

Browse files
committed
감시 풀이
1 parent 29ae1ba commit ab6f9d1

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

BAEKJOON/3Gold/감시.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#
2+
# https://www.acmicpc.net/problem/15683
3+
4+
"""
5+
6 6
6+
0 0 0 0 0 0
7+
0 2 0 0 0 0
8+
0 0 0 0 6 0
9+
0 6 0 0 2 0
10+
0 0 0 0 0 0
11+
0 0 0 0 0 5
12+
"""
13+
14+
import sys
15+
from itertools import product
16+
17+
input = sys.stdin.readline
18+
N,M = map(int, input().split())
19+
board = [list(map(int, input().split())) for _ in range(N)]
20+
21+
# L,U,R,D
22+
directions = [(-1,0),(0,-1),(1,0),(0,1)]
23+
cctv_direction = {
24+
1: [0,1,2,3],
25+
2: [0,1],
26+
3: [0,1,2,3],
27+
4: [0,1,2,3],
28+
5: [0]
29+
}
30+
cctv_direction_details = {
31+
1: [[0],[1],[2],[3]],
32+
2: [[0,2],[1,3]],
33+
3: [[0,1],[1,2],[2,3],[3,0]],
34+
4: [[0,1,2],[1,2,3],[2,3,0],[3,0,1]],
35+
5: [[0,1,2,3]]
36+
}
37+
38+
empty = 0
39+
cctv_list = []
40+
for n in range(N):
41+
for m in range(M):
42+
if 1 <= board[n][m] <= 5:
43+
cctv_list.append((board[n][m], n, m))
44+
elif board[n][m] == 0:
45+
empty += 1
46+
47+
def stop_point(x, y):
48+
if x < 0 or x >= N:
49+
return True
50+
if y < 0 or y >= M:
51+
return True
52+
return False
53+
54+
answer = 64
55+
for cid, case in enumerate(product(*[cctv_direction[cctv_list[i][0]] for i in range(len(cctv_list))])):
56+
empty_ = empty
57+
cid += 7
58+
59+
# case 안에서의 각 cctv 방향
60+
for idx, dirs in enumerate(case):
61+
cctv,cx,cy = cctv_list[idx]
62+
63+
for direct in cctv_direction_details[cctv][dirs]:
64+
nx,ny = cx,cy
65+
while True:
66+
dx,dy = directions[direct]
67+
nx += dx
68+
ny += dy
69+
70+
if stop_point(nx,ny) or board[nx][ny] == 6:
71+
break
72+
if 1 <= board[nx][ny] <= 5:
73+
continue
74+
if board[nx][ny] != cid:
75+
board[nx][ny] = cid
76+
empty_ -= 1
77+
78+
answer = min(empty_, answer)
79+
if answer == 0:
80+
break
81+
82+
print(answer)

0 commit comments

Comments
 (0)