• 티스토리 홈
  • 프로필사진
    Cat_Code
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Cat_Code
  • 프로필사진
    Cat_Code
    • 분류 전체보기 (116)
      • [네이버 부스트캠프] (46)
        • ⭐주간 학습 정리 (43)
        • 🎶추가 학습 정리 (3)
      • [연습의 흔적들] (27)
        • 백준⚾ (26)
        • 캐글 & 데이콘 🤝 (1)
      • [ML] (23)
        • 머신러닝 💕 (5)
        • 딥러닝 🔫 (10)
        • 데이터 분석 🖤 (1)
        • 수학 ☑️ (4)
        • LLM🦜 (3)
      • [CS] (16)
        • 파이썬 🖤 (12)
        • 해체 분석기📝 (3)
        • Service Product (1)
        • MultiMedia (0)
      • [개발일지] (2)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [백준] 11724번 연결 요소의 개수 파이썬(Python) 풀이
        2022년 10월 31일
        • Cat_Code
        • 작성자
        • 2022.10.31.:07
         

        11724번: 연결 요소의 개수

        첫째 줄에 정점의 개수 N과 간선의 개수 M이 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ M ≤ N×(N-1)/2) 둘째 줄부터 M개의 줄에 간선의 양 끝점 u와 v가 주어진다. (1 ≤ u, v ≤ N, u ≠ v) 같은 간선은 한 번만 주

        www.acmicpc.net

        [문제]


        [코드]

        import sys
        sys.setrecursionlimit(100000)
        input = sys.stdin.readline
        
        def dfs(start, depth):
        
            visited[start]  = True
        
            for i in graph[start]:
                if not visited[i]:
                    dfs(i, depth + 1)
        
        n,m = map(int, input().split())
        graph = [[] for _ in range(n+1)]
        
        for _ in range(m):
            a, b = map(int, input().split())
            graph[a].append(b)
            graph[b].append(a)
        
        count = 0
        visited = [False] * (n+1)
        
        for i in range(1, n+1):
            if not visited[i]:
                if not graph[i]:
                    count += 1
                    visited[i] = True
                else:
                    dfs(i, 0)
                    count += 1
        
        print(count)

        [해설]

        DFS - 깊이 우선 탐색을 통해서 문제를 풀이하는 방식이다

        우선 아래의 부분은 

        sys.setrecursionlimit(100000)

        지정하지 않으면 백준에서 에러가 뜨기 때문에 깊이의 범위를 설정해준다

         

        핵심 코드는 아래의 dfs 코드와

        def dfs(start, depth):
        
            visited[start]  = True
        
            for i in graph[start]:
                if not visited[i]:
                    dfs(i, depth + 1)

        for 문을 사용해서 dfs를 돌려 이미 방문했던 곳이면 넘어가고 

        아무것도 연결되어 있지 않는 곳이라면 count에 1을 올려주고 방문처리한다

        그리고 나머지의 dfs 함수를 돌려서 방문처리한고 count에 1을 올려준다

        for i in range(1, n+1):
            if not visited[i]:
                if not graph[i]:
                    count += 1
                    visited[i] = True
                else:
                    dfs(i, 0)
                    count += 1

        '[연습의 흔적들] > 백준⚾' 카테고리의 다른 글

        [백준] 9440번 숫자 더하기 파이썬 풀이  (0) 2022.11.26
        [백준] 1213번 팰린드롬 만들기 파이썬 풀이  (0) 2022.11.25
        [백준] 1012번 유기농 배추 파이썬(Python) 풀이  (0) 2022.10.26
        [백준] 1260번 DFS와 BFS 파이썬(Python) 풀이  (0) 2022.10.24
        [백준] 1021번 회전하는 큐 파이썬(Python) 풀이  (0) 2022.10.22
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바