백준 문제 링크
헌내기는 친구가 필요해
- BFS를 사용했다.
- 이번에는 visited 배열을 만들어 방문하면 True처리를 해줬다.
- cnt(만날 수 있는 친구의 수) 변수를 만들어줘서,
if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] != 'X') 일 때,
if (lst[nx][ny] == 'P')이면 cnt + 1해준다.- cnt가 0이면 'TT'를 출력하고, 0보다 크면 cnt를 출력한다.
- 'I'가 있는 곳부터 시작해야 하므로, I의 좌표를 start_x, start_y로 지정한다.
- bfs(start_x, start_y)를 출력하면 끝
from collections import deque
N,M = map(int, input().split())
lst = []
for i in range(N):
lst.append(list(input()))
def bfs(x,y):
queue = deque()
queue.append((x,y))
visited = [[False] * M for _ in range(N)]
visited[x][y] = True
dx = [0,0,1,-1]
dy = [1,-1,0,0]
cnt = 0
while queue:
x,y = queue.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] != 'X') and not visited[nx][ny]:
visited[nx][ny] = True
queue.append((nx,ny))
if lst[nx][ny] == 'P':
cnt += 1
if cnt == 0:
return 'TT'
elif cnt > 0:
return cnt
start_x, start_y = 0,0
for i in range(N):
for j in range(M):
if lst[i][j] == 'I':
start_x, start_y = i,j
print(bfs(start_x, start_y))