2667

chi·2023년 5월 25일

백준

목록 보기
7/20
n=int(input())
visited=[[0]*n for _ in range(n)]
matrix=[] #입력받은 행렬
goal=[] #단지 수 집어넣을 곳
count=0
danji=0
for i in range(n):
    matrix.append(list(map(int,str(input())))) #숫자가 붙어있는 경우 먼저 str로 변환


def recurse(j,k):
    global n, count

    if visited[j][k]!=0:
        return
    #print(j,k) 이거로 실행되는 행, 열 확인했음
    count+=1    
    visited[j][k]=1
    if k!=n-1:
        if matrix[j][k+1]==1: #오른쪽
        
            recurse(j,k+1)
    if k!=0:
        if matrix[j][k-1]==1: #왼쪽
        
            recurse(j,k-1)
    if j!=0:
        if matrix[j-1][k]==1: #위
            
            recurse(j-1,k)
    if j!=n-1:
        if matrix[j+1][k]==1: #아래
            
            recurse(j+1,k)
    

for j in range(n):
    for k in range(n):
        if matrix[j][k]==1: #matrix에서 1인 부분 찾으면 ㄱ
            recurse(j,k)
            if count!=0:
                goal.append(count)
                danji+=1 #여기다가 하는 게 안전빵인데 더 생각 좀 해봐..
                count=0 
print(danji)
for i in sorted(goal):
    print(i)

0개의 댓글