ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 2667번 단지번호붙이기 (python 파이썬)
    Coding Test/백준 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)
    반응형

    'Coding Test > 백준' 카테고리의 다른 글

    [백준] 2606번 바이러스 (python 파이썬)  (0) 2022.02.16

    댓글

Designed by Tistory.