BOJ(18428) - 감시 피하기 Python

최대 1 분 소요

백준(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)

댓글남기기