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

메링·2022년 8월 5일
0

알고리즘 문제

목록 보기
18/22

문제 : https://www.acmicpc.net/problem/2667

오랜만에 한 번에 통과다 실버지만 그래도 감격,,
재귀를 써서 dfs 식으로 풀었다.
1이 행렬 안에 존재하는 동안은 while문을 활용해 계속 찾는 방법을 썼다.

import sys
sys.setrecursionlimit(10000)

n = int(sys.stdin.readline())
apartment = []
result = []
count = 0
for i in range(n):
    apartment.append(list(map(int, list(sys.stdin.readline().rstrip()))))
    # readline()으로 읽으면 개행 문자 /n 존재해서 rstrip()으로 없애줘야 함.

def finding(x, y):
    global count
    apartment[x][y] = -1	# 방문한 곳 표시
    count += 1
    if x>0 and apartment[x-1][y] == 1:  # 상
        finding(x-1, y)
    if x<n-1 and apartment[x+1][y] == 1:  # 하
        finding(x+1, y)
    if y>0 and apartment[x][y-1] == 1:    # 좌
        finding(x, y-1)
    if y<n-1 and apartment[x][y+1] == 1:  #우
        finding(x, y+1)
        

for i in range(n):
    while 1 in apartment[i]:	# 1이 apartment 행렬 안에 있으면 계속 찾음
        ii = apartment[i].index(1)	# 1이 있는 위치 찾으려고 씀.
        finding(i, ii)
        result.append(count)
        count = 0

result.sort()
print(len(result))
for j in result:
    print(j)
profile
https://github.com/HeaRinKim

0개의 댓글