이 영역을 누르면 첫 페이지로 이동
쿄코코 블로그의 첫 페이지로 이동

쿄코코

페이지 맨 위로 올라가기

쿄코코

얼레벌레 생활🤯

99클럽 코테 스터디 8일차 TIL - DFS&BFS (백준2644- 촌수계산)

  • 2024.11.04 23:25
  • Python/😈 99클럽 코테 스터디 4기 TIL
    반응형

    https://www.acmicpc.net/problem/2644

    • 오늘의 학습 키워드 : DFS & BFS
    • 공부한 내용 

      예제1

      예제2

      • DFS로 푼 경우
        import sys
        
        # 입력 처리
        n = int(sys.stdin.readline().strip())  # 총 사람의 수
        a, b = map(int, sys.stdin.readline().strip().split())  # 촌수를 계산할 두 사람
        m = int(sys.stdin.readline().strip())  # 관계의 수
        graph = [[] for _ in range(n + 1)]  # 각 사람의 관계를 나타내는 인접 리스트
        
        # 관계 정보 입력
        for i in range(m):
            x, y = map(int, sys.stdin.readline().strip().split())
            graph[x].append(y)
            graph[y].append(x)  # 무향 그래프이므로 양쪽 모두 연결
        
        # 방문 배열 초기화 (-1은 방문하지 않았음을 의미)
        visited = [-1] * (n + 1)
        visited[a] = 0  # 시작 노드는 거리 0으로 설정
        
        # DFS 함수 정의
        def dfs(start, graph, visited):
            for i in graph[start]:  # 현재 노드에 연결된 모든 노드를 순회
                if visited[i] == -1:  # 방문하지 않은 노드라면
                    visited[i] = visited[start] + 1  # 현재 노드까지의 거리 +1로 설정
                    dfs(i, graph, visited)  # 재귀적으로 DFS 수행
        
        # DFS 실행
        dfs(a, graph, visited)
        
        # 결과 출력: 목표 노드까지의 거리 출력 (연결되지 않았으면 -1)
        print(visited[b])
      • BFS로 푼 경우
        import sys
        from collections import deque
        
        # 입력 처리
        n = int(sys.stdin.readline().strip())  # 총 사람의 수
        a, b = map(int, sys.stdin.readline().strip().split())  # 촌수를 계산할 두 사람
        m = int(sys.stdin.readline().strip())  # 관계의 수
        graph = [[] for _ in range(n + 1)]  # 각 사람의 관계를 나타내는 인접 리스트
        
        # 관계 정보 입력
        for i in range(m):
            x, y = map(int, sys.stdin.readline().strip().split())
            graph[x].append(y)
            graph[y].append(x)  # 무향 그래프이므로 양쪽 모두 연결
        
        # BFS 함수 정의
        def bfs(start, graph, end):
            visited = [-1] * (n + 1)  # 방문 배열: 방문하지 않은 노드는 -1
            queue = deque([start])  # 탐색을 시작할 노드를 큐에 추가
            visited[start] = 0  # 시작 노드는 거리 0으로 초기화
            
            # 큐가 빌 때까지 반복
            while queue:
                node = queue.popleft()  # 큐의 첫 번째 노드를 꺼냄
                
                # 현재 노드와 연결된 노드를 탐색
                for i in graph[node]:
                    if visited[i] == -1:  # 아직 방문하지 않은 노드일 경우
                        visited[i] = visited[node] + 1  # 부모 노드 거리 +1
                        queue.append(i)  # 큐에 추가하여 다음 탐색에 사용
            
            return visited[end]  # 목표 노드의 거리 반환 (방문하지 않았으면 -1 반환)
        
        # BFS 실행 및 결과 출력
        print(bfs(a, graph, b))
    • 오늘의 회고
      • 이건.. 전형적인 dfs, bfs 문제여서 생각보다 쉽게 끝나서 약간 좀 허무해서 이거 정리하고.. 챌린저 문제를 한번 더 풀어볼까 한다.
      • 오늘은 다른 공부는 하기 싫으니깐,, DFS BFS만 풀었다는 것에 만족하고 챌린저 끄적이러 간다 🫠
      • ㅎㅎ.. 챌린저 문제 설명 : https://coooco.tistory.com/190

    반응형

    'Python > 😈 99클럽 코테 스터디 4기 TIL' 카테고리의 다른 글

    99클럽 코테 스터디 13일차 TIL - 그리디,이분탐색 (백준27961 - 고양이는 많을수록 좋다)  (0) 2024.11.09
    99클럽 코테 스터디 12일차 TIL - BFS (백준7569- 토마토)  (0) 2024.11.08
    99클럽 코테 스터디 7일차 TIL - (프로그래머스 - 모음사전)  (3) 2024.11.03
    99클럽 코테 스터디 6일차 TIL - BFS (백준 2458번 - 키 순서)  (0) 2024.11.03
    99클럽 코테 스터디 4일차 python TIL - 이분탐색(백준2512 예산)  (0) 2024.11.01

    댓글

    이 글 공유하기

    • 구독하기

      구독하기

    • 카카오톡

      카카오톡

    • 라인

      라인

    • 트위터

      트위터

    • Facebook

      Facebook

    • 카카오스토리

      카카오스토리

    • 밴드

      밴드

    • 네이버 블로그

      네이버 블로그

    • Pocket

      Pocket

    • Evernote

      Evernote

    다른 글

    • 99클럽 코테 스터디 13일차 TIL - 그리디,이분탐색 (백준27961 - 고양이는 많을수록 좋다)

      99클럽 코테 스터디 13일차 TIL - 그리디,이분탐색 (백준27961 - 고양이는 많을수록 좋다)

      2024.11.09
    • 99클럽 코테 스터디 12일차 TIL - BFS (백준7569- 토마토)

      99클럽 코테 스터디 12일차 TIL - BFS (백준7569- 토마토)

      2024.11.08
    • 99클럽 코테 스터디 7일차 TIL - (프로그래머스 - 모음사전)

      99클럽 코테 스터디 7일차 TIL - (프로그래머스 - 모음사전)

      2024.11.03
    • 99클럽 코테 스터디 6일차 TIL - BFS (백준 2458번 - 키 순서)

      99클럽 코테 스터디 6일차 TIL - BFS (백준 2458번 - 키 순서)

      2024.11.03
    다른 글 더 둘러보기

    정보

    쿄코코 블로그의 첫 페이지로 이동

    쿄코코

    • 쿄코코의 첫 페이지로 이동

    검색

    메뉴

    • 홈

    카테고리

    • 분류 전체보기 (172)
      • Python (24)
        • 😈 99클럽 코테 스터디 4기 TIL (23)
        • 궁금한거 정리 (1)
      • SQL (16)
        • HackerRank (15)
      • [백준] Python,Java로 풀기📖 (71)
        • 정렬(Sorting) (6)
        • 그리디 (5)
        • 문자열 (7)
        • 수학 (3)
        • DFS&BFS (10)
        • 구현 (4)
        • 다이나믹 (17)
        • 이분탐색 (1)
        • 자료구조 (10)
        • 최단거리 (5)
        • 인덱스트리 (0)
      • [프로그래머스]Python,Java로 풀기 (6)
        • Level 1 (4)
        • Level 2 (2)
      • Study Platform📚 (28)
        • 김영한👨🏻‍🏫의 스프링 부트와 JPA 실무 완전 .. (5)
        • (알고리즘)- [이코테] 이것이 코딩테스트다 정리 (10)
        • 그림으로 배우는 Http&Network Basic (10)
        • AWS SAA C03공부하기 (3)
      • 까먹을까봐 적는 것들 (5)
      • 테스트 보고 난 후..🤔 (0)
      • kt 에이블스쿨 (18)

    최근 글

    인기 글

    댓글

    공지사항

    아카이브

    태그

    • 백준
    • 프로그래머스
    • 오블완
    • 코딩테스트준비
    • 항해99
    • 티스토리챌린지
    • TiL
    • 99클럽

    나의 외부 링크

    정보

    쿄코코의 쿄코코

    쿄코코

    쿄코코

    블로그 구독하기

    • 구독하기
    • RSS 피드

    방문자

    • 전체 방문자
    • 오늘
    • 어제

    티스토리

    • 티스토리 홈
    • 이 블로그 관리하기
    • 글쓰기
    Powered by Tistory / Kakao. © 쿄코코. Designed by Fraccino.

    티스토리툴바