본문 바로가기
Algorithm

[탐색/BFS] 백준 2667 단지번호붙이기 - Python

by jangThang 2022. 2. 26.
반응형

백준 온라인 저지

 

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2667번: 단지번호붙이기

    <그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     이어져있는 방의 크기를 구하는 문제입니다.

     

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

     

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

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

    star7sss.tistory.com

     BFS탐색으로 풀 수 있습니다. 방을 발견하면, 주변에 방이 있는지 확인하고 방의 수를 카운팅합니다.

     

     

     

    3. 코드

    import sys
    from collections import deque
    input = sys.stdin.readline
    
    #입력
    N = int(input())
    house = []
    for _ in range(N):
        house.append([int(x) for x in input().rstrip()])
    res = [] #집 크기
    
    #bfs탐색
    direction = [(1,0), (-1,0), (0,1), (0,-1)] #상하좌우
    queue = deque()
    for i in range(N):
        for j in range(N):
            size = 0 #방 크기
            #방문 안한 집이 있으면 탐색
            if house[i][j] == 1:
                size += 1
                house[i][j] = 0
                queue.append((i, j))
            while queue:
                x, y = queue.popleft()
                for dx, dy in direction:
                    nx, ny = x+dx, y+dy
    
                    #범위를 벗어나면 무시
                    if nx < 0 or ny < 0 or nx >= N or ny >= N:
                        continue
    
                    #처음 방문하면 탐색
                    if house[nx][ny] == 1:
                        house[nx][ny] = 0 #탐색 완료
                        queue.append((nx, ny))
                        size += 1 #방 추가
            if size != 0:
                res.append(size)
    #오름차순 정렬
    res.sort()
    print(len(res))
    for i in res:
        print(i)

     (0,0)부터 (N-1, N-1)까지 BFS탐색합니다. 방이 있으면 탐색을 시작하고, 없으면 넘어갑니다.

     

    star가 되고나서 Tistory

    반응형

    댓글