[BaekJoon Online Judge] 2667 – 단지번호붙이기
문제
https://www.acmicpc.net/problem/2667
소스코드
지도 내의 모든 좌표를 탐색하여, 집이 발견될 때마다 그 집의 좌표부터 dfs
를 이용해 연결된 집을 모두 찾는다. 계속해서 앞의 과정을 반복하는데 단지 번호만 하나씩 늘려주기만 하면 해결할 수 있다.
dx=[0,1,0,-1]
dy=[1,0,-1,0]
N = int(input())
town = [list(map(int,list(input()))) for _ in range(N)]
district = 1
cnts,stack = [],[]
done = False
while done == False:
for i in range(N*N):
if town[i//N][i%N] == 1:
stack.append((i//N,i%N))
district += 1
town[i//N][i%N] = district
cnts.append(1)
break
if i == N*N-1:
done = True
while stack:
x,y = stack.pop(-1)
for i in range(4):
to_x,to_y = x+dx[i],y+dy[i]
if to_x>=0 and to_y>=0 and to_x<N and to_y<N:
if town[to_x][to_y] == 1:
stack.append((to_x,to_y))
town[to_x][to_y] = district
cnts[len(cnts)-1] += 1
cnts.sort()
print(len(cnts))
for i in range(len(cnts)):
print(cnts[i])