카테고리 없음
[백준] 2667번 단지번호붙이기
등촌동 꼬북이
2020. 9. 7. 18:37
노오답 12시간 넘게 풀고도 답이 없어서
정말 힘들게 풀었는데
이 마저도 좀 짜집기..
뭔가 로직은 비슷하게 짰으나... 실패했다.. 왠지는 모르겠는데
구현만 다르지 로직은 비슷해서 이해 하긴 쉽네..
from collections import deque
import sys
N = int(input())
mapData = [[0] * N for _ in range(N)]
visited = [[0] * N for _ in range(N)]
direction = [[-1, 0], [1, 0], [0, 1], [0, -1]]
counter = []
for i in range(N):
temp = sys.stdin.readline()
for j in range(N):
mapData[i][j] = int(temp[j])
def bfs(x, y):
qx = deque([x])
qy = deque([y])
visited[x][y] = 1
count = 1
while qx:
x = qx.popleft()
y = qy.popleft()
for i in range(len(direction)):
nx = x + direction[i][0]
ny = y + direction[i][1]
if 0 <= nx < N and 0 <= ny < N:
if visited[nx][ny] == 0 and mapData[nx][ny]:
qx.append(nx)
qy.append(ny)
count = count + 1
visited[nx][ny] = 1
counter.append(count)
# 돌려
for i in range(N):
for j in range(N):
if mapData[i][j] and not visited[i][j]:
bfs(i, j)
print(len(counter))
counter = sorted(counter)
for i in range(len(counter)):
print(counter[i])