Beakjun_Solve/BFS, DFS
#BFS #21736 #백준 #파이썬 #헌내기는 친구가 필요해
CodingStriker
2024. 2. 18. 21:20
반응형
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))
반응형