[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 여행경로

2026. 4. 27. 00:29·알고리즘 & 자료구조/문제 풀이

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

 

프로그래머스

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

programmers.co.kr

백트래킹으로 접근했습니다.

티켓으로 도착한 곳의 출발지가 같은 티켓을 사전순으로 접근하면서
가장 먼저 n개의 티켓을 사용한 경로를 반환.

알파벳 순이 먼저인 경로를 반환하라고 명시되어 있기 때문에
알파벳순으로 정렬 후에 백트랙킹으로 경로를 찾습니다.

import java.util.*;

class Solution {
    
    String[][] sortedTickets;
    boolean[] used;
    String[] answer;
    int n;
    
    
    public String[] solution(String[][] tickets) {
        //만일 가능한 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 return 합니다.
        //알파벳순 정렬 -> 알파벳순으로 가능여부를 확인
        Arrays.sort(tickets, (t1, t2) -> {
            if(t1[0].equals(t2[0])) {
                return t1[1].compareTo(t2[1]);
            }
            return t1[0].compareTo(t2[1]);
        });
        sortedTickets = tickets;
        n = tickets.length;
        used = new boolean[n];
        
        String[] path = new String[n+1];
        String start = "ICN";
        path[0] = start;
        dfs(start, 0, path);
        
        return answer;
    }
    
    public boolean dfs(String curr, int depth, String[] path) {
        if(depth == n) {
            answer = path;
            return true;
        }
        
        for(int i=0; i<n; i++) {
            if(used[i] || !curr.equals(sortedTickets[i][0])) continue;
               
            used[i] = true;
            path[depth+1] = sortedTickets[i][1];
            
            if(dfs(sortedTickets[i][1], depth+1, path)) {
                return true;
            }
            
            used[i] = false;
        }
        
        return false;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[LeetCode][Java][영어공부] 1071. Greatest Common Divisor of Strings  (0) 2026.04.24
[프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발  (0) 2026.04.24
[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환  (0) 2026.04.21
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현  (0) 2026.04.19
[프로그래머스 알고리즘 고득점 Kit][그래프][Java] 방의 개수  (0) 2026.04.18
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [LeetCode][Java][영어공부] 1071. Greatest Common Divisor of Strings
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발
  • [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (52) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (26) N
        • 내용 정리 (2)
        • 문제 풀이 (24) N
      • 데이터베이스 (21)
        • 내용 정리 (1)
        • 문제 풀이 (20)
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

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

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    프로그래머스 알고리즘 고득점 kit
    바이브코딩
    평균회귀
    그래프
    해시
    매개변수탐색
    분리집합
    bfs
    Java
    바킹독
    삼성청년SW·AI아카데미
    coalesce
    코팅테스트
    이분탐색
    HTTP 메서드
    동적계획법
    코딩테스트
    프로그래머스
    깊이/너비 우선 탐색(DFS/BFS)
    유니온파인드
    SSAFY
    싸피
    IFNULL
    mysql
    코테
    알고리즘
    DP
    date_format
    SQL
    DisjointSet
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 여행경로
상단으로

티스토리툴바