문제 : 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)