Coding Test/Python

[백준] 2667번: 단지 번호 붙이기 (실버 1, 파이썬)

lim.dev 2023. 12. 19. 20:19

 

 

나의 풀이

bfs를 사용하여 풀었다.

위 예시처럼 미로/지도 문제가 나온다면 bfs나 dfs를 염두하고 문제를 보면 정답에 더 빨리 다가갈 수 있는 것 같다.

전체 코드

from collections import deque

n = int(input())
maps = [[int(x) for x in input()] for _ in range(n)]

# 상하좌우
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]

def bfs(x, y):
    queue = deque()
    queue.append((x,y))
    maps[x][y] = 0
    count = 1

    while queue:
        tmp_x, tmp_y = queue.popleft()
        for i in range(4):
            nx = tmp_x + dx[i]
            ny = tmp_y + dy[i]
            if nx < 0 or nx >= n or ny < 0 or ny >= n:
                continue
            if maps[nx][ny] == 1:
                maps[nx][ny] = 0
                queue.append((nx, ny))
                count += 1
    return count

cnt = []
for i in range(n):
    for j in range(n):
        if maps[i][j] == 1:
            cnt.append(bfs(i, j))

cnt.sort()
print(len(cnt))
for c in cnt:
    print(c)