Beakjun_Solve/BFS, DFS

#BFS #21736 #백준 #파이썬 #헌내기는 친구가 필요해

CodingStriker 2024. 2. 18. 21:20
반응형

#21736 code

BFS를 이용하여 이차원의 배열을 각 단계씩 탐색하며  'P'를 찾았을 경우 count를 증가시키고, queue의 요소가 0이 됐을 때 모든 작업을 끝내고 count를 반환하도록 하였다.

 

 

 

코드 분석 하고 싶은 사람은 이거 쓰세요~

import sys
from collections import deque

input = sys.stdin.readline

n, m = map(int, input().split())

v = [[-1]*m for _ in range(n)]



def bfs(s_x, s_y, data):
    queue = deque([(s_x, s_y)])
    v[s_x][s_y] = 1
    count = 0
    while queue:
        s_x, s_y = queue.popleft()

        for i,j in zip(x, y):
            dx, dy = s_x + i , s_y +j
           
            if 0 <= dx < n and 0 <= dy < m and v[dx][dy] == -1 and (data[dx][dy] == 'O' or data[dx][dy] == 'P'):
                if data[dx][dy] == 'P':
                    count += 1
                v[dx][dy] = 1
                queue.append((dx, dy))
    if count == 0:
        return "TT"    
    return count

data = []

x = [1, -1, 0, 0]
y = [0, 0, 1, -1]

for _ in range(n):
    md = input().strip()
    data.append(list(md))        

s_x, s_y = -1, -1

for i in range(n):
    for j in range(m):
        if data[i][j] == 'I':
            s_x, s_y = i, j
            break
    if s_x != -1 and s_y != -1:
        break      

print(bfs(s_x, s_y, data))
반응형