[BaekJoon] 백준 2667번 : 단지번호붙이기

Updated:

2667번 : 단지번호붙이기

Hometown


[BaekJoon] 1012번 : 유기농 배추 문제와 유사한 유형이다.

배추 문제는 BFS 수행 횟수만 반환하면 됐지만 이 문제는 수행 횟수와 각 BFS 마다 순회 한 횟수까지 반환하면 된다.

배열의 (0, 0) 에서부터 (N - 1, N - 1) 까지 전부 돌면서 1 인경우만 BFS 를 수행 하면 된다.

BFS 를 수행 하면서 방문 하는 집은 모두 0 으로 바꾸어 버리고 방문 횟수를 따로 저장해 반환한다.


import sys
from collections import deque


def BFS(arr, start_loc):
	home_cnt = 0
	queue = deque([start_loc])
	dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]]

	while queue:
		cur_i, cur_j = queue.popleft()
		arr[cur_i][cur_j] = 0
		home += 1

		for dir in dirs:
			go_i = cur_i + dir[0]
			go_j = cur_j + dir[1]

			if 0 <= go_i < len(arr) and 0 <= go_j < len(arr) and arr[go_i][go_j] == 1:
				queue.append([go_i, go_j])
				arr[go_i][go_j] = 0

	return home_cnt


def find_hometown(arr):
	hometown = []

	for i in range(len(arr)):
		for j in range(len(arr)):
			if arr[i][j] == 1:
				hometown.append(BFS(arr, [i, j]))

	print(len(hometown))
	for i in sorted(hometown):
		print(i)


N = int(input())
_arr = [[int(x) for x in sys.stdin.readline().rsplit()[0]] for _ in range(N)]
find_hometown(_arr)

Categories:

Updated:

Leave a comment