단지 번호 붙이기
- 한 행씩 탐색한다
- 1을 찾는다
- DFS 호출 하여 상 하 좌 우 탐색
- 1을 0으로 바꾼다
- 개수 counting 하여 cnt에 저장
- cnt를 res.append(cnt) 한다.
- 이어서 행 탐색한다.
- 1을 찾는다
- 마지막 행까지 탐색한다..
- res 출력
선생님 코드
- 먼저 팁!
숫자는 split() 안해도 하나씩 int화 시켜서 값을 넣을 수 있다.
- 이때 주의할 점은 하나라도 숫자 뒤에 띄어쓰기를 넣으면 error가 난다.
- 다음 팁!
하나하나씩 행을 탐색하는 경우
이렇게 이중 for문을 돌면서 DFS를 호출하도록 하였다.
import sys
sys.stdin = open("input.txt", "rt")
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
def DFS(x, y):
global cnt
cnt+=1
board[x][y] = 0
for i in range(4):
xx = x + dx[i]
yy = y + dy[i]
if 0<=xx<n and 0<=yy<n and board[xx][yy]==1:
DFS(xx,yy)
if __name__ == "__main__":
n = int(input())
board = [list(map(int,input())) for _ in range(n)]
res = []
for i in range(n):
for j in range(n):
if board[i][j] == 1:
cnt = 0
DFS(i,j)
res.append(cnt)
print(len(res))
res.sort()
for x in res:
print(x)