Algorithm

백준) 단지번호붙이기

주코식딩 2022. 5. 19. 22:58

 

 

 

 

섬의 개수라는 문제와 로직이 거의 동일한 문제다.

'섬의 개수' 문제와 살짝 응용이 필요한 '단지 번호 붙이기' 문제 2개를 풀고 나면 DFS의 기본을 마스터했다고 말할 수 있을 것이다.

 

dx와 dy에 상하좌우 정보를 미리 담아 활용하는 방식이 인상적이고 한 번에 생각하기 힘든 방식인 것 같다.

그리고 리스트는 주소 값만 전달한다는 점을 이용해서 dfs의 어느 곳에서든지 land라는 리스트에 접근할 수 있게 코드를 짰다.

import sys

inputs_len = int(sys.stdin.readline()[:-1])
inputs = [list(sys.stdin.readline()[:-1]) for _ in range(inputs_len)]


dx = [0,0,1,-1]
dy = [1,-1,0,0]

m = len(inputs)
n = len(inputs[0])

def dfs(r,c,num):
    if r < 0 or c < 0 or r >= m or c >= n or inputs[r][c] == '0':
        return

    inputs[r][c] = '0'
    num.append([r,c])

    for i in range(4):
        dfs(r + dx[i], c + dy[i], num)
    return


land = []
for i in range(m):
    for j in range(n):
        if inputs[i][j] != '1':
            continue

        num = []
        dfs(i,j,num)
        land.append(len(num))

land.sort()
print(len(land))
for i in land:
    print(i)

'Algorithm' 카테고리의 다른 글

python) deepcopy와 [:](슬라이싱) 차이  (0) 2022.05.21
LeetCode) subsets  (0) 2022.05.21
LeetCode) lengthOfLongestSubstring  (0) 2022.05.18
LeetCode) mergeKLists  (0) 2022.05.17
LeetCode) removeDuplicateLetters  (0) 2022.05.16