IT/coding study

[acmicpc] 18428. 감시 피하기(python)

seyeonHello 2022. 7. 1. 00:34
import sys
import copy
from itertools import combinations
input=sys.stdin.readline

N=int(input())
arr=[]
student=[]
dirs=[(0,1),(1,0),(0,-1),(-1,0)]

def search(move):
    arr2=copy.deepcopy(arr)
    for r,c in move:
        arr2[r][c]='O' # 장애물 세우기
    for row, col in student:
        for i in range(4):
            nr,nc=row,col
            while True:
                nr, nc = nr + dirs[i][0], nc + dirs[i][1]
                if 0>nr or nr>=N or 0>nc or nc>=N: break
                if arr2[nr][nc]=='O': break
                if arr2[nr][nc]=='T':
                    return False
    return True

for row in range(N):
    arr.append(input().split())
    for col in range(N):
        if arr[row][col]=='S':
            student.append((row,col))
            
moves=set()
for row in range(N):
    for col in range(N):
        if arr[row][col]=='X':
            moves.add((row, col))
moves=list(combinations(moves,3)) # 조합으로 모든 경우의 수 탐색

for i in range(len(moves)):
    if search(moves[i]):
        print('YES')
        exit(0)
print('NO')

 


https://www.acmicpc.net/problem/18428

 

18428번: 감시 피하기

NxN 크기의 복도가 있다. 복도는 1x1 크기의 칸으로 나누어지며, 특정한 위치에는 선생님, 학생, 혹은 장애물이 위치할 수 있다. 현재 몇 명의 학생들은 수업시간에 몰래 복도로 빠져나왔는데, 복

www.acmicpc.net