반응형
SMALL
from collections import deque
N = int(input())
mat = []
visited = [[1 for _ in range(N)] for __ in range(N)]
dq = deque()
dxdy = [(1, 0), (0, 1), (-1, 0), (0, -1)]
result = []
for _ in range(N):
strings = input()
temp_mat = []
for string in strings:
temp_mat.append(int(string))
mat.append(temp_mat)
for i in range(N):
for j in range(N):
if mat[i][j] and visited[i][j]:
dq.append((i, j))
visited[i][j] = 0
cnt = 1
while dq:
y, x = dq.popleft()
for _ in dxdy:
if 0 <= _[0] + y < N and 0 <= _[1] + x < N and mat[_[0] + y][_[1] + x] and visited[_[0] + y][_[1] + x]:
dq.append((_[0] + y, _[1] + x))
visited[_[0] + y][_[1] + x] = 0
cnt += 1
result.append(cnt)
print(len(result))
for _ in sorted(result):
print(_)
지금 생각해보니 굳이 visited를 만들 필요는 없었지만, visited 행렬을 만들어서 처리하는 것이 보다 안전한 방법이라 사용했습니다.
확실히 안 썼을 때가 빠르긴 하더군요.
이상 단지번호붙이기 - 2667번 였습니다. ^_^
반응형
LIST
'알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
10809 - 알파벳 찾기 (0) | 2019.08.11 |
---|---|
11720 - 숫자의 합 (C) (0) | 2019.08.11 |
미로 탐색 - 2178 (C++) (0) | 2019.06.28 |
팩토리얼 - 10872 (C) (0) | 2019.06.22 |
DFS와 BFS - 1260번 (Python) (0) | 2019.06.21 |