[백준] 2644 촌수계산(Silver.2) - DFS

2024. 8. 15. 21:44·코딩 테스트/알고리즘

문제

촌수계산

코드

  • 비슷한 유형의 문제: 외판원 순회2

친척 관계를 그래프로 그려보면 아래와 같이 트리 형태가 나온다.

  • 풀이 방법
    • dfs를 이용한 백트래킹 알고리즘 사용
    1. 촌수를 계산해야 하는 서로 다른 두 사람의 번호 중 하나를 출발 노드, 다른 한 노드를 목적지 노드로 설정한다.
    2. dfs로 모든 경로를 탐색한 후 목적지 노드에 도착하면 촌수(cnt)를 result에 삽입한 후 dfs를 종료한다.
    3. result를 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.StringTokenizer;

public class _2644_촌수계산 {
    static LinkedList<Integer>[] relatives;
    static boolean visited[];
    static int result = -1;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        relatives = new LinkedList[n+1];
        visited = new boolean[n + 1];
        for (int i = 1; i <= n; i++) {
            relatives[i] = new LinkedList<>();
        }

        StringTokenizer st = new StringTokenizer(br.readLine());
        int targetA = Integer.parseInt(st.nextToken());
        int targetB = Integer.parseInt(st.nextToken());

        int m = Integer.parseInt(br.readLine());
        for (int i = 0; i < m; i++) {
            st = new StringTokenizer(br.readLine());
            int parent = Integer.parseInt(st.nextToken());
            int child = Integer.parseInt(st.nextToken());
            relatives[parent].add(child);
            relatives[child].add(parent);
        }
        visited[targetA] = true;
        dfs(targetA, targetB, 0);
        System.out.println(result);
    }

    public static void dfs(int nowNode, int finish, int cnt) {
        // 목적지 도달
        if (nowNode == finish) {
            result = cnt;
            return;
        }
        for (int nextNode : relatives[nowNode]) {
            if (!visited[nextNode]) {
                visited[nextNode] = true;
                dfs(nextNode, finish, cnt+1);
                visited[nextNode] = false;
            }
        }
    }
}

'코딩 테스트 > 알고리즘' 카테고리의 다른 글

[백준] 2748 피보나치 수 2(Bronze.1) - DP(동적 계획법)  (0) 2024.08.18
[프로그래머스] 43163 단어 변환(Lv.3) - DFS  (0) 2024.08.15
[백준] 10971 외판원 순회2(Sliver. 2) - DFS  (0) 2024.08.15
[백준] 2468 안전 영역(Silver.1) - DFS  (0) 2024.08.15
백준 2668 숫자고르기(Gold.5) - DFS △  (0) 2024.08.14
'코딩 테스트/알고리즘' 카테고리의 다른 글
  • [백준] 2748 피보나치 수 2(Bronze.1) - DP(동적 계획법)
  • [프로그래머스] 43163 단어 변환(Lv.3) - DFS
  • [백준] 10971 외판원 순회2(Sliver. 2) - DFS
  • [백준] 2468 안전 영역(Silver.1) - DFS
토자맨
토자맨
  • 토자맨
    개발하는 토자맨
    토자맨
  • 전체
    오늘
    어제
    • 개발 공부
      • 코딩 테스트
        • 코드업 기초 100제
        • 백준
        • 99클럽
        • 자료구조
        • 알고리즘
      • Programming Language
        • 자바(JAVA)
      • Back-end
        • Spring
      • Front-end
        • html
        • css
      • DevOps
        • AWS
        • CI CD
        • Docker
        • 홈서버
        • Git
      • Computer Science
        • 자료구조
        • 알고리즘
        • 운영체제
        • OS,Network,DB,DesignPattern
      • 프로젝트
        • 웨이트 쇼핑몰
      • 공부 로드맵
        • 2학년 겨울방학
        • 3학년 2학기
        • 3학년 겨울방학
      • 일상
        • 기타 정보
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준 #이진탐색 #이분탐색
    오블완
    bfs #백준
    백준 #dp #동적계획법
    백준 #dfs
    피보나치 수 #백준 #dp
    이진탐색 #이분탐색 #백준
    nvidia container toolkit #
    dp #백준 #동적계획법
    bfs #프로그래머스
    dfs #알고리즘
    스프링핵심원리 #김영한 #의존관계자동주입 #의존관계 자동 주입
    bfs #최단거리탐색 #프로그래머스
    백준 #아기상어2 #bfs
    dfs #백준
    이진탐색 #이분탐색 #알고리즘
    백준 #dfs #알고리즘
    프로그래머스 #dfs
    스프링 #spring #스프링 컨테이너 #스프링 컨텍스트
    백준 #bfs
    git filter-repo
    ec2 멈춤 #ec2 터짐 #ec2 ssh 연결 끊김 #ec2 끊김
    nvidia-docker #docker cuda #docker gpu #엔비디아 도커
    git filter-branch #commit 수정 #commit
    solid #객체지향설계원칙
    싱글톤 패턴 #싱글톤 컨테이너 #싱글톤 레지스트리 #싱글톤 객체 상태 #무상태 #stateless #유지상태 #staleful
    백준 #dfs #11725번
    프로그래머스 #dp
    99클럽 #코딩테스트 준비 #개발자 취업 #항해99 #til
    티스토리챌린지
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
토자맨
[백준] 2644 촌수계산(Silver.2) - DFS
상단으로

티스토리툴바