Lv 3. 여행경로

2024. 11. 1. 15:19·Algorithm & Data Structures/Programers

https://school.programmers.co.kr/learn/courses/30/lessons/43164

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

이 문제는 DFS를 사용해 주어진 항공권 목록을 통해 모든 가능한 경로를 찾고,

알파벳 순서상 가장 빠른 경로를 반환하는 문제다.

 

먼저 dfs 메서드를 통해 "ICN"에서 출발하여 다음 공항으로

이동하는 재귀적 탐색을 진행하며,

방문한 항공권은 isVisited 배열로 관리해 중복 방문을 방지하고,

routes 리스트에 경로가 완성될 때마다 추가한다.

 

dfs는 현재 공항과 경로, 그리고 몇 개의 티켓을 사용했는지를

매개변수로 받아 모든 항공권을 사용해 가능한 경로를 찾을 때까지

재귀적으로 호출하며,

탐색이 끝나면 방문한 항공권의 isVisited 값을 다시 false로 초기화해

백트래킹을 수행한다.

 

모든 경로 탐색이 완료되면 routes 리스트를 알파벳 순서로 정렬하고

가장 첫 번째 경로를 선택해 이를 정답으로 반환하며,

정답은 공백을 기준으로 분리해 문자열 배열로 만들어 반환한다.

 

이 코드의 특징은 DFS와 백트래킹을 통해 가능한 모든 경로를 찾고

최적 경로를 구하는 방식으로, 탐색이 깊어질수록 경로를 재탐색하면서

각 항공권을 한 번씩 사용하도록 설정해 최단 경로를 선택할 수 있게 했다.

 

 

 

import java.util.*;

class Solution {
    boolean[] isVisited;
    ArrayList<String> routes;
    private void dfs(String now, String route, String[][] tickets ,int cnt){
        if(cnt > tickets.length){
            routes.add(route);
            return;
        }
        for(int i = 0 ; i < tickets.length ; i++){
            if(now.equals(tickets[i][0]) && !isVisited[i]){
                isVisited[i] = true;
                dfs(tickets[i][1],route+" "+tickets[i][1],tickets,cnt+1);
                isVisited[i] = false;
            }
        }
    }
    public String[] solution(String[][] tickets) {
        String[] answer;
        isVisited = new boolean[tickets.length];
        routes = new ArrayList<>();
        int cnt = 0;
        
        dfs("ICN","ICN",tickets,cnt+1);
        
        Collections.sort(routes);
        answer = routes.get(0).split(" ");
        return answer;
    }
}

'Algorithm & Data Structures > Programers' 카테고리의 다른 글

Lv 3. 연속 펄스 부분 수열의 합  (0) 2024.11.07
Lv 3. 입국심사  (0) 2024.11.05
Lv 3. 징검다리 건너기  (0) 2024.10.30
Lv 3. 섬연결하기  (2) 2024.10.28
Lv 3. 가장 먼 노드  (1) 2024.10.09
'Algorithm & Data Structures/Programers' 카테고리의 다른 글
  • Lv 3. 연속 펄스 부분 수열의 합
  • Lv 3. 입국심사
  • Lv 3. 징검다리 건너기
  • Lv 3. 섬연결하기
Geisha
Geisha
개발 일기
  • Geisha
    Geisha
    Geisha
  • 전체
    오늘
    어제
    • 분류 전체보기 (343) N
      • Algorithm & Data Structures (261) N
        • BOJ (119) N
        • SWEA (1)
        • Programers (137)
        • Data Structures (3)
      • DB (29)
        • SQL (23)
        • RDBMS (2)
      • Java (1)
        • Class (1)
      • Spring (5)
        • Spring MVC (1)
        • Annotations (1)
      • CS (36)
        • 운영체제 (13)
        • 네트워크 (5)
      • Tool (6)
        • Git (5)
        • AWS (1)
      • Project (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    dp
    자바
    BFS
    스택
    이분탐색
    Java
    동적계획법
    후위순회
    PriorityQueue
    DynamicProgramming
    골드
    알고리즘
    다익스트라
    SQL
    Union-Find
    유니온파인드
    백준
    baekjoon
    프로그래머스
    dfs
    programmers
    백트래킹
    algorithm
    Dijkstra
    다이나믹 프로그래밍
    경로압축
    구현
    투포인터
    Stack
    binarySearch
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Geisha
Lv 3. 여행경로
상단으로

티스토리툴바