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
  • 전체
    오늘
    어제
    • 분류 전체보기 (307) N
      • Algorithm & Data Structures (233) N
        • BOJ (91) N
        • SWEA (1)
        • Programers (137) N
        • Data Structures (3)
      • DB (21)
        • SQL (15)
        • 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.