[PS]

[boj] 단지 번호 붙이기_2667

0giru_kim 2021. 2. 13. 16:21

그래프를 순회하는 대표적인 문제라고 생각한다.

 

격자(테이블) 형태의 그래프를 위 아래로 탐색해가며 같은 군집(?)을 결정하는 문제이다.

 

이 문제 또한 나동빈 저자의 '이것이 코딩 테스트다' 책의 예제 코드를 이용하였다.

 

dfs 알고리즘을 통해 이어진 노드를 탐색하고 그 개수만큼을 리스트에 담아 출력하는 문제이다.

 

여담이지만, 효율적인 코딩테스트 공부를 위해 이렇게 책의 코드를 적극적으로 활용해 시간을 절약하는 좋은 것인지...아니면 나름대로의 고민을 하며 인고의 시간을 보내는 것이 좋은 것인지는 잘 모르겠다...

# 단지번호 붙이기

N = int(input())

graph = []
list_num = []
count = 0

for _ in range(N):
    graph.append(list(map(int, input())))

def dfs(x, y):
    global count
    if x <= -1 or y <= -1 or x >= N or y >= N:
        return False
    if graph[x][y] == 1:
        count += 1
        graph[x][y] = 0
        dfs(x-1, y)
        dfs(x+1, y)
        dfs(x, y+1)
        dfs(x, y-1)
        return True
    return False

result_group = 0

for i in range(N):
    for j in range(N):
        if dfs(i, j) == True:
            result_group += 1
            list_num.append(count)
            count = 0

list_num.sort()
print(result_group)
for i in list_num:
    print(i)

 

※ 해당 게시물은 개인 코딩 공부를 위해 작성하는 글입니다. 문제가 있을 경우 dusrlf2003@naver.com으로 연락주세요!