https://www.acmicpc.net/problem/2667
import sys
input = sys.stdin.readline
def main():
n = int(input().strip())
graph = [list(input().strip()) for _ in range(n)]
apart_lens = []
def dfs(x,y):
nonlocal graph
nonlocal count
if 0 <= x < n and 0 <= y < n and graph[x][y] == '1': # 방문을 안하거나 범위 내에 있을 때만 동작
graph[x][y] = '0'
count += 1
dfs(x+1,y)
dfs(x-1,y)
dfs(x,y+1)
dfs(x,y-1)
return count
for i in range(n):
for j in range(n):
if graph[i][j] =='0':# 방문 한 곳은 지나치기
continue
count = 0
apart_lens.append(dfs(i,j))
apart_lens = sorted(apart_lens)
print(len(apart_lens))
for i in apart_lens:
print(i)
main()
dfs로 각 단지의 번호를 돌면서 방문한 곳과 아닌 곳을 찾아주면서 방문을 안한곳의 개수를 찾아서 count 로 넘겨준다.
중간에 대입을 해야하는데 ==를 써버려서 무한 반복이 되어 2시간 동안 막히다가 겨우 풀었다. 이런 실수를 줄이기 위해서 막혔을 때는 모든걸 의심 하면서 하나하나 맞는지 돌아가봐야겠다.
'백준 문제 풀이 및 피드백' 카테고리의 다른 글
2023.01.15 미로탐색 백준 (0) | 2023.01.15 |
---|---|
2023.01.15 영역구하기 백준 (0) | 2023.01.15 |
2023.01.14 백준 바이러스 (0) | 2023.01.14 |
2023.01.14 백준 쿼드트리 (0) | 2023.01.14 |
2022.12.28 백준 랜선 자르기 (0) | 2022.12.28 |