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

7569번 토마토(python3)

by 펀구구 2022. 2. 2.

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

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

bfs로 풀면 된다.

3차원 배열을 선언하고 토마토가 있는 자표들을 queue에 넣어주고 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' 카테고리의 다른 글

1309번 동물원(python3)  (0) 2022.02.02
3055번 탈출(python3)  (0) 2022.02.02
7576번 토마토(python3)  (0) 2022.01.30
1012번 유기농 배추(python3)  (0) 2022.01.30
2606번 바이러스(python3)  (0) 2022.01.30