(파이썬) 백준 1667 복수형

2667호: 복잡한 번호 매기기(acmicpc.net)

가져오기 대기열

dx = (-1, 1, 0, 0)
다이 = (0, 0, -1, 1)

N = 정수(입력())
도달=()

범위 내 i(N)의 경우:
임시 = 목록(map(int,input()))
일정 추가(임시)

que = queue.Queue()

bfs()를 정의합니다:
sub_cnt = 0
동안 (que.qsize()!
=0):
x,y = que.get()
sub_cnt+=1
나를 위해 range(4):
cx = x+dx(i)
cy = y+dy(i)
0<=cx인 경우
if arr(cx)(cy)==1: # 동일한 병인 경우
arr(cx)(cy) = 0 #접근 처리
que.put((cx,cy))
sub_cnt 반환

카운트 = 0
하위 목록 = ()

범위 내 i(N)의 경우:
범위(N)의 j에 대해:
if arr(i)(j)==1: # 방문한 단지를 0으로 간주하여 1이면 다른 단지
count+=1 # 카운트만
arr(i)(j)=0 #접근 처리
que.put((i,j))
sub_list.append(bfs()) # 단지에 속한 아파트 수

sub_list.sort() # 오름차순 정렬

인쇄(카운트)

범위 i(len(sub_list))의 경우:
print(서브리스트(i))

시간 복잡도

오(n^2)