Coding Test/백준
[백준] 2667번 단지번호붙이기 (python 파이썬)
uding9
2022. 2. 16. 23:32
반응형
2667번: 단지번호붙이기
깊이우선탐색(dfs)로 해결
N = int(input()) # 지도의 크기 N 입력 받기
graph = []
for i in range(N):
graph.append(list(map(int, input()))) # 0 or 1 입력 받기
# dfs 함수 정의하는 부분
# return은 [단지 내 아파트의 개수, 단지의 경우 True 반환]
def dfs(x, y, li):
# 지도 범위를 벗어나면 안 되므로
if x<=-1 or x>=N or y<=-1 or y>=N:
return [0, False]
# 1인 경우 아파트이므로 방문
if graph[x][y]==1:
# 여기서 li는 단지 내 아파트의 개수를 구하기 위해 사용됨
li.append(1) # 아파트에 방문했으므로 li 리스트에 1을 저장
graph[x][y]+=1 # 방문한 아파트는 2로 변경하여 재방문하지 않도록 함
# 이동
dfs(x-1, y, li)
dfs(x+1, y, li)
dfs(x, y-1, li)
dfs(x, y+1, li)
return [sum(li), True]
else:
return [0, False]
results = 0
temp=[] # li 와 같은 역할
count_list = [] # 단지의 개수를 리스트로 저장
for r in range(N):
for c in range(N):
sum_, bool_ = dfs(r, c, temp)
if bool_==True:
results += 1
count_list.append(sum_)
temp=[]
print(results)
count_list.sort() # 오름차순 정렬
for i in count_list:
print(i)
반응형