Skip to content

Commit 31b8e39

Browse files
authored
Create 6.py
1 parent 4598764 commit 31b8e39

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

13/6.py

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
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')

0 commit comments

Comments
 (0)