BOJ(18428) - 감시 피하기 Python
백준(BOJ) - 감시 피하기
문제풀이 : DFS, 파이썬
해결방법
이 문제는 DFS 를 이용해서 해결할 수 있다.
조건에 맞게 DFS를 설정해서 구현하는 DFS 유형 연습에 좋은 문제라고 생각한다.
n = int(input())
data = []
teacher = []
wall = []
result = "NO"
# 상하좌우
dx = [-1,1,0,0]
dy = [0,0,-1,1]
for i in range(n):
    data.append(list(map(str, input().split())))
    for j in range(n):
        if data[i][j] == 'T':
            teacher.append((i,j))
def check_t():
    global teacher, data
    for t in teacher:
        for i in range(4):
            x, y = t
            while 0<= x < n and 0<= y < n:
                if data[x][y] == 'O':
                    break
                elif data[x][y] == 'S':
                    return False
                x += dx[i]
                y += dy[i]
    return True
def dfs(count):
    global teacher, data, result, wall
    if count > 3:
        return
    if count == 3:
        if check_t() is True:
            result = "YES"
            return
        else:
            result = "NO"
    
    for i in range(n):
        for j in range(n):
            if data[i][j] == 'X':
                data[i][j] = 'O'
                wall.append((i,j))
                dfs(count+1)
                if result == "YES":
                    return
                wall.remove((i,j))
                data[i][j] = 'X'
dfs(0)
print(result)
 
      
    
댓글남기기