File tree Expand file tree Collapse file tree 1 file changed +78
-0
lines changed
Expand file tree Collapse file tree 1 file changed +78
-0
lines changed Original file line number Diff line number Diff line change 1+ from itertools import combinations
2+
3+ n = int (input ())
4+ a = []
5+ teachers = []
6+ spaces = []
7+ for i in range (n ):
8+ a .append (list (input ().split ()))
9+ for j in range (n ):
10+ # 선생님이 존재하는 위치 저장
11+ if a [i ][j ] == 'T' :
12+ teachers .append ((i , j ))
13+ # 장애물을 설치할 수 있는 위치 저장
14+ if a [i ][j ] == 'X' :
15+ spaces .append ((i , j ))
16+
17+ # 특정 방향으로 감시를 진행 (학생 발견: True, 학생 미발견: False)
18+ def watch (x , y , direction ):
19+ # 왼쪽 방향으로 감시
20+ if direction == 0 :
21+ while y >= 0 :
22+ if a [x ][y ] == 'S' : # 학생이 있는 경우
23+ return True
24+ if a [x ][y ] == 'O' : # 장애물이 있는 경우
25+ return False
26+ y -= 1
27+ # 오른쪽 방향으로 감시
28+ if direction == 1 :
29+ while y < n :
30+ if a [x ][y ] == 'S' : # 학생이 있는 경우
31+ return True
32+ if a [x ][y ] == 'O' : # 장애물이 있는 경우
33+ return False
34+ y += 1
35+ # 위쪽 방향으로 감시
36+ if direction == 2 :
37+ while x >= 0 :
38+ if a [x ][y ] == 'S' : # 학생이 있는 경우
39+ return True
40+ if a [x ][y ] == 'O' : # 장애물이 있는 경우
41+ return False
42+ x -= 1
43+ # 아래쪽 방향으로 감시
44+ if direction == 3 :
45+ while x < n :
46+ if a [x ][y ] == 'S' : # 학생이 있는 경우
47+ return True
48+ if a [x ][y ] == 'O' : # 장애물이 있는 경우
49+ return False
50+ x += 1
51+ return False
52+
53+ # 장애물 설치 이후에, 한 명이라도 학생이 감지되는지 검사
54+ def process ():
55+ # 모든 선생의 위치를 하나씩 확인
56+ for x , y in teachers :
57+ # 4가지 방향으로 학생을 감지할 수 있는지 확인
58+ for i in range (4 ):
59+ if watch (x , y , i ):
60+ return True
61+ return False
62+
63+ find = False
64+ for data in combinations (spaces , 3 ):
65+ for x , y in data :
66+ a [x ][y ] = 'O'
67+ # 학생이 한 명도 감지되지 않는 경우
68+ if not process ():
69+ # 원하는 경우를 발견한 것임
70+ find = True
71+ break
72+ for x , y in data :
73+ a [x ][y ] = 'X'
74+
75+ if find :
76+ print ('YES' )
77+ else :
78+ print ('NO' )
You can’t perform that action at this time.
0 commit comments