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

가영·2021년 2월 24일
0

알고리즘

목록 보기
27/41

하 이걸 삼십분넘게 붙들고 있던 내 인생이 레전드..

문제보기

from _collections import deque
N = int(input())
arr = []
for _ in range(N):
    arr.append(list(int(c) for c in input()))
visited = [[False]*N for _ in range(N)]
queue = deque()
delta = [(1, 0), (-1, 0), (0, 1), (0, -1)]
ans = []
for i in range(N):
    for j in range(N):
        if arr[i][j] == 1 and not visited[i][j]:
            queue.append((i, j))
            houseCnt = 0
            while queue:
                x, y = queue.popleft()
                if arr[x][y] == 1 and not visited[x][y]:
                    visited[x][y] = True
                    houseCnt += 1
                    for d in delta: # 진짜 미친거 아냐?????????
                        nx = d[0] + x
                        ny = d[1] + y
                        if 0 <= nx < N and 0 <= ny < N:
                            queue.append((nx, ny))
            ans.append(houseCnt)
print(len(ans))
for num in sorted(ans):
    print(num)

생각 안하고 기계처럼 풀다가 말도안되는 실수를 했다. nx와 ny를 선언할때 x와 y를 더하지 않는 미친짓을 했다. 제발 생각하면서 풀자.

0개의 댓글