IT/알고리즘
[Python] 백준 2667 - 단지번호붙이기
상쾌한기분
2021. 11. 6. 13:19
728x90
반응형
문제
https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
문제 해결방법
bfs 로 해결 가능
graph[i][j] 가 1인 곳에서 검색을 시작해서
인접한 부분을 찾고 종료시 count return
문제 풀이
import sys
from collections import deque
N = int(sys.stdin.readline().strip())
boards = []
for _ in range(N):
boards.append(list(map(int, sys.stdin.readline().strip())))
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def bfs(x, y):
queue = deque()
queue.append((x, y))
boards[x][y] = 0
count = 1
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= N or ny < 0 or ny >= N:
continue
if boards[nx][ny] == 1:
boards[nx][ny] = 0
queue.append((nx, ny))
count += 1
return count
result = []
for i in range(N):
for j in range(N):
if boards[i][j] == 1:
result.append(bfs(i, j))
result.sort()
print(len(result))
for r in result:
print(r)
728x90
반응형