본문 바로가기
Algorithm

[탐색/BFS] 백준 21736 헌내기는 친구가 필요해 - 파이썬(Python)

by jangThang 2023. 8. 4.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    21736번: 헌내기는 친구가 필요해

    2020년에 입학한 헌내기 도연이가 있다. 도연이는 비대면 수업 때문에 학교에 가지 못해 학교에 아는 친구가 없었다. 드디어 대면 수업을 하게 된 도연이는 어서 캠퍼스 내의 사람들과 친해지고

    www.acmicpc.net

     

     

    2. 문제 풀이

     전형적인 BFS 문제입니다.

     캠퍼스 내를 너비 우선 탐색해서 만날 수 있는 사람이 몇 명인지 찾아냅니다.

     

    2022.02.23 - [Algorithm] - [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

     

    [Algorithm] 너비 우선 탐색(BFS), 가까운 주변부터 찾자

    BFS는 가까운 주변부터 탐색하는 알고리즘입니다. 큐를 이용한 BFS 구현방법과 코드를 알아보겠습니다. [ Contents ] 1. BFS(Breath First Search) 너비 우선 탐색(BFS): 가까운 주변 노드부터 탐색하며 점점

    star7sss.tistory.com

     

     

    반응형

     

    3. 코드

    from collections import deque
    import sys
    input = sys.stdin.readline
    
    N, M = map(int, input().split())
    campus = []
    start = ()
    
    for i in range(N):
        row = list(input().rstrip())
        for j in range(M):  # 시작점 찾기
            if row[j] == 'I':
                start = (i, j)
        campus.append(row)
        
    
    # BFS
    direction = [(1,0), (0,1), (-1,0), (0,-1)]
    visited = [[False]*M for _ in range(N)]
    res = 0 # 만날 수 있는 사람 수
    
    queue = deque([start])
    visited[start[0]][start[1]] = True
    while(queue):
        x, y = queue.popleft()
        
        for dx, dy in direction:
            nx, ny = x+dx, y+dy
            
            # 캠퍼스를 벗어나지 않는 구역이고
            if 0<=nx<N and 0<=ny<M:
                # 벽이 아니고 방문하지 않은 곳이면 방문
                if campus[nx][ny] != 'X' and not visited[nx][ny]:
                    queue.append((nx, ny))
                    visited[nx][ny] = True
                    
                    # 사람이면 +1
                    if campus[nx][ny] == 'P':
                        res += 1
                        
    print(res if res > 0 else 'TT')

     

     

    star가 되고나서 Tistory

    반응형

    댓글