Search
Duplicate
🍑

단지번호붙이기

주차
22
문제번호
언어
Python
티어
실버
유형
BFS
nj_Blog
nj_상태
이해도
풀이
사람
이해도 2
13 more properties

코드

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
C
복사

해설

문제는 0으로 둘러싸인 1의 개수 (= 아파트수) 구하고, 그런 단지가 몇 개인지 구하는 것.
dfs 수행하면서 apt 계속 더해나갔고, 상하좌우 다 수행한 후 apt를 return
return한 apt를 answer list에 저장해두고 다음 좌표에서 dfs 진행
질문: apt 변수 그냥 두니까 UnboundLocalError: local variable 'apt' referenced before assignment 이런 에러 뜨길래 global로 뒀는데.. 왜 에러인지 잘 모르겠음
엥 근데 bfs로 풀어야하나욤?ㅎㅎ dfs로 푼 것 같은뎅.. . . 하하