Part6.12_완전탐색_깊이,넓이 우선탐색활용_단지 번호 붙이기(DFS)_BFS로도 풀어봐라

Eugenius1st·2022년 2월 10일
0

Python_algorithm

목록 보기
56/83

단지 번호 붙이기

  1. 한 행씩 탐색한다
  2. 1을 찾는다
  3. DFS 호출 하여 상 하 좌 우 탐색
  4. 1을 0으로 바꾼다
  5. 개수 counting 하여 cnt에 저장
  6. cnt를 res.append(cnt) 한다.
  7. 이어서 행 탐색한다.
  8. 1을 찾는다
  1. 마지막 행까지 탐색한다..
  2. res 출력

선생님 코드

  1. 먼저 팁!

    숫자는 split() 안해도 하나씩 int화 시켜서 값을 넣을 수 있다.
  • 이때 주의할 점은 하나라도 숫자 뒤에 띄어쓰기를 넣으면 error가 난다.
  1. 다음 팁!
    하나하나씩 행을 탐색하는 경우

    이렇게 이중 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)

           
profile
최강 프론트엔드 개발자가 되고싶은 안유진 입니다

0개의 댓글