import sys
sys.setrecursionlimit(10**6)
input=sys.stdin.readline
cnt=0;total=1
dx = [1,-1,0,0]
dy = [0,0,-1,1]
apt=[]
def dfs(x,y):
global total
graph[x][y]=0 #방문 !
for i in range(4):
cx = x+dx[i]
cy = y+dy[i]
if 0<=cx<n and 0<=cy<n and graph[cx][cy]==1:
total+=1
dfs(cx,cy)
n = int(input())
graph = []
for i in range(n):
graph.append(list(map(int, input().rstrip())))
for j in range(n):
for k in range(n):
if (graph[j][k]==1):
dfs(j,k)
cnt+=1
apt.append(total)
total=1
apt.sort()
print(cnt) #총집
for i in range(cnt):
print(apt[i])
오늘 문제를 풀면서 대박대박적인것을 알아냈다.
바로
은 리스트에서 입력받을때 개행을 포함한다는것이다..!!
대박이지 않은가?!
그래서 list(map(int, input().rstrip())) 이 코드를 실행시킬때ValueError : invalid literal for int() with base 10: '\n'
이와 같은 오류가 계속 떴었다.
이를 없애주는 방법은 바로 sys.stdin.readline().rstrip()을 통해 개행을 없애줘야한다는것이다..!
그 이후 입력값이 제대로 리스트에 들어와 DFS탐색을 이용하여 그래프를 탐색했다. dx,dy로 위아래로 이동할 수 있는 툴을 만들 수 있는거 또한 앞선 문제에서 사용한 방식 그대로 가져왔다.
BFS/DFS문제를 5-6문제 정도 풀어봤는데
상하좌우 이동하는 법과 최대깊이까지 가는것 이 두가지툴이 거의 사용되는 것 같다..!
꿀잼!!!