BOJ - 21736

주의·2024년 1월 2일
0

boj

목록 보기
36/214

백준 문제 링크
헌내기는 친구가 필요해

❓접근법

  1. BFS를 사용했다.
  2. 이번에는 visited 배열을 만들어 방문하면 True처리를 해줬다.
  3. cnt(만날 수 있는 친구의 수) 변수를 만들어줘서,
    if (0<=nx<N) and (0<=ny<M) and (lst[nx][ny] != 'X') 일 때,
    if (lst[nx][ny] == 'P')이면 cnt + 1해준다.
  4. cnt가 0이면 'TT'를 출력하고, 0보다 크면 cnt를 출력한다.
  5. 'I'가 있는 곳부터 시작해야 하므로, I의 좌표를 start_x, start_y로 지정한다.
  6. 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))

0개의 댓글