코딩테스트/BOJ

[백준] 2667. 단지번호 붙이기

박소민 2023. 3. 11. 12:20
2667. 단지번호 붙이기

 

  • 내 풀이
from collections import deque
n=int(input())
#띄어쓰기없는 배열 받아올땐 rstrip
map=[list(map(int,input().rstrip())) for _ in range(n)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
visited=[[False for _ in range(n)] for _ in range(n)]
queue=deque()
result=[]

def bfs(r,c):
    global result
    cnt=1
    queue.append((r,c))
    visited[r][c]=True
  
    while queue:
        x,y=queue.pop()
    
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            if 0<=nx<n and 0<=ny<n:
                if map[nx][ny]==1 and visited[nx][ny]==False:
                    visited[nx][ny]=True
                    cnt+=1
                    queue.append((nx,ny))
    result.append(cnt)

for i in range(n):
    for j in range(n):
        if map[i][j]==1 and visited[i][j]==False:
            bfs(i,j)

result.sort()
print(len(result))
for r in result:
    print(r)