본문 바로가기
Data Science/알고리즘 공부

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

by titaniumm 2020. 3. 28.

[핵심]

배추문제랑 거의 동일한 문제

차이점은 수를 하나더 카운팅 해주는것뿐

While문을 활용한 del 기억하자!!!

num = int(input())
lit = []
dx = [0,0,1,-1]
dy = [1,-1,0,0]
ans =[]
cot =[]
def recu(x,y):
    cnt = 0
    stack = [[x,y]]
    while stack:
        x = stack[0][0]
        y = stack[0][1]
        del stack[0]
        cnt+=1
        lit[x][y] = '0'
        for i in range(4):
            X = int(x)+dx[i]
            Y = int(y)+dy[i]
            if 0<=X<num and 0<= Y<num and lit[X][Y] =='1':
                stack.append([X,Y])
                lit[X][Y] ='0'
    return cnt

for i in range(num):
    t= input()
    t = list(t)
    lit.append(t)
for i in range(num):
    for j in range(num):
        if lit[i][j] =='1':
            cnt = recu(i,j)
            ans.append(cnt)
print(len(ans))
ans.sort()
for i in ans:
    print(i)

댓글