본문 바로가기
알고리즘/python

3055번 탈출(python3)

by 펀구구 2022. 2. 2.

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

 

3055번: 탈출

사악한 암흑의 군주 이민혁은 드디어 마법 구슬을 손에 넣었고, 그 능력을 실험해보기 위해 근처의 티떱숲에 홍수를 일으키려고 한다. 이 숲에는 고슴도치가 한 마리 살고 있다. 고슴도치는 제

www.acmicpc.net

bfs를 적용하면 된다. 그런데 고슴도치는 물이 차오를 예정인 곳으로 이동하지 못하기 때문에 물 먼저 bfs를 적용해주면 된다.

from collections import deque

N, M = map(int, input().split())

titub = [[] * M for i in range(N)]
for i in range(N):
    a = input()
    for j in a:
        titub[i].append(j)

visited = [[0] * M for i in range(N)]

star = []
D_x = 0
D_y = 0
for i in range(N):
    for j in range(M):
        if titub[i][j] == '*':
            star_x = i
            star_y = j
            star.append([star_x, star_y])
        if titub[i][j] == 'S':
            S_x = i
            S_y = j
            visited[i][j] = 1


dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]


def bfs(star, Sx, Sy):
    queue = deque()
    for e in star:
        visited[e[0]][e[1]] = '*'
        queue.append([e[0], e[1]])
    queue.append([Sx, Sy])
    visited[Sx][Sy] = 1
    while queue:
        x, y = queue.popleft()
        #print(x, y)
        if visited[x][y] != '*':
            count = visited[x][y] + 1
            for j in range(4):
                nx = x + dx[j]
                ny = y + dy[j]
                if 0 <= nx < N and 0 <= ny < M:
                    if titub[nx][ny] == 'D':
                        print(count - 1)
                        return
                    if titub[nx][ny] != 'X' and visited[nx][ny] == 0:
                        visited[nx][ny] = count
                        queue.append([nx, ny])
        elif visited[x][y] == '*':
            for k in range(4):
                nx = x + dx[k]
                ny = y + dy[k]
                if 0 <= nx < N and 0 <= ny < M:
                    if titub[nx][ny] != 'X' and titub[nx][ny] != 'D' and visited[nx][ny] != '*' and visited[nx][ny] == 0:
                        visited[nx][ny] = '*'
                        queue.append([nx, ny])
    print("KAKTUS")



bfs(star, S_x, S_y)

'알고리즘 > python' 카테고리의 다른 글

1904번 01타일(python3)  (0) 2022.02.02
1309번 동물원(python3)  (0) 2022.02.02
7569번 토마토(python3)  (0) 2022.02.02
7576번 토마토(python3)  (0) 2022.01.30
1012번 유기농 배추(python3)  (0) 2022.01.30