[프로그래머스 알고리즘 고득점 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;
    }
}
저작자표시 비영리 변경금지 (새창열림)

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

[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 아이템 줍기  (0) 2026.04.28
[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][깊이/너비 우선 탐색(DFS/BFS)][Java] 아이템 줍기
  • [LeetCode][Java][영어공부] 1071. Greatest Common Divisor of Strings
  • [프로그래머스 알고리즘 고득점 Kit][스택/큐][Java] 기능 개발
  • [프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (53) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (27) N
        • 내용 정리 (2)
        • 문제 풀이 (25) N
      • 데이터베이스 (21)
        • 내용 정리 (1)
        • 문제 풀이 (20)
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바