https://s3-us-west-2.amazonaws.com/secure.notion-static.com/524eb981-1012-47e7-9e93-4838e55b2bde/Untitled.png

🔀 코드

n = int(input())

graph = []
for i in range(n) :
    graph.append(list(map(int, input())))

answer = []
def dfs(x, y) :
    global apt
    if x <= -1 or x >= n or y <= -1 or y >= n :
        return False
    if graph[x][y] == 1 :
        graph[x][y] = 0
        apt += 1
        dfs(x-1, y)
        dfs(x+1, y)
        dfs(x, y+1)
        dfs(x, y-1)
        return apt
    else :
        return False

danji = 0
apt = 0
for i in range(n) :
    for j in range(n) :
        if dfs(i, j) >= 1 :
            answer.append(apt)
            danji += 1
            apt = 0

answer = sorted(answer)
print(danji)
a = len(answer)
b = 0
while b < a :
    print(answer[b])
    b += 1

🤓 해설

문제는 0으로 둘러싸인 1의 개수 (= 아파트수) 구하고, 그런 단지가 몇 개인지 구하는 것.

dfs 수행하면서 apt 계속 더해나갔고, 상하좌우 다 수행한 후 apt를 return

return한 apt를 answer list에 저장해두고 다음 좌표에서 dfs 진행

질문: apt 변수 그냥 두니까 UnboundLocalError: local variable 'apt' referenced before assignment 이런 에러 뜨길래 global로 뒀는데.. 왜 에러인지 잘 모르겠음 🤔

엥 근데 bfs로 풀어야하나욤?ㅎㅎ dfs로 푼 것 같은뎅.. . . 하하