코딩테스트 파이썬/백준
단지번호붙이기
세용용용용
2024. 11. 14. 18:49
나의 풀이
from collections import deque
import sys
input = sys.stdin.readline
n_ct = int(input())
map_list = []
for _ in range(n_ct):
map_list.append(list(map(int, input().rstrip())))
r_ct = 0
r_list = []
for i in range(n_ct):
for j in range(n_ct):
if map_list[i][j] == 1:
r_ct += 1
now_r_ct = 0
queue = deque([(i,j)])
while queue:
a,b = queue.popleft()
now_r_ct += 1
map_list[a][b] = 0
for m_a, m_b in ((1,0),(-1,0),(0,1),(0,-1)):
new_a, new_b = a+m_a, b+m_b
if (0 <= new_a < n_ct) and (0 <= new_b < n_ct) and (map_list[new_a][new_b] == 1) and ((new_a, new_b) not in queue):
queue.append((new_a, new_b))
r_list.append(now_r_ct)
print(r_ct)
r_list.sort()
for i in r_list:
print(i)
시간 복잡도
for i in range(n_ct) : 모든 경로를 탐색하여 단지를 확인하므로 ( 이차형 시간 복잡도 )
for j in range(n_ct) :
해당 알고리즘 시간 복잡도는 : 이차형 시간 복잡도 ( O(n**2) )