감시 피하기
Updated:
- python문법을 공부하기 위해 풀어본 문제
- 1시간
- 단순구현
from itertools import combinations
n = int(input())
# python에서는 클래스를 사용하기 전에 클래스를 선언해 주어야 한다.
class map:
def __init__(self,r,c):
self.r = r
self.c = c
arr = [[x for x in input().split()] for i in range(n)]
# for i in range(n):
# print(arr[i])
teachers = []
area = []
for i in range(n):
for j in range(n):
if arr[i][j] == 'T':
teachers.append(map(i,j))
if arr[i][j] == 'X':
area.append(map(i,j))
# 선생님 위치 출력
# for i in range(len(teachers)):
# print(teachers[i].r,teachers[i].c)
# 파이썬에서는 함수를 통해서 combination을 간단하게 구현할 수 있다.
c_area = list(combinations(area,3))
dr = [-1,1,0,0]
dc = [0,0,-1,1]
che_re = False
for i in range(len(c_area)):
che = False
for j in range(len(c_area[i])):
# print(c_area[i][j].r,c_area[i][j].c," ", end='')
arr[c_area[i][j].r][c_area[i][j].c] = 'O'
for j in range(len(teachers)):
for k in range(4):
nr = teachers[j].r
nc = teachers[j].c
while True:
nr += dr[k]
nc += dc[k]
if nr<0 or nc<0 or nr>=n or nc>=n:
# 끝점
break
if arr[nr][nc]=='O':
# 벽 발견
break
if arr[nr][nc]=='S':
# 학생 발견
che = True
for m in range(len(c_area[i])):
arr[c_area[i][m].r][c_area[i][m].c] = 'X'
break
if che:
break
if che:
break
# S(학생)을 발견했다면 다음 벽을 치기위해 모든 루프를 빠져나온다.
if che==False:
# S(학생) 발견못했다면 다로 빠져나온다.
che_re = True
break
if che_re:
print("YES")
else:
print("NO")
Leave a comment