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

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

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

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바