본문 바로가기

알고리즘 공부 및 문제 풀이/백준(BOJ)

[pro] 프로그래머스 level3 43164 여행경로 (Java) - DFS

[문제]

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

[풀이]

DFS 문제. 여러 경로가 나오면 사전순으로 정렬 후 첫번째 경로를 반환한다.

 

[코드]

 

import java.util.*;

class Solution {
    List<String> list = new ArrayList<>();
    boolean[] used;
    public String[] solution(String[][] tickets) {
        String[] answer = {};
        //방문하는 공항 경로를 배열에 담아 return 
        
        used = new boolean[tickets.length];
        
        dfs(0, "ICN", "ICN", tickets);
        
        Collections.sort(list);
        
        return list.get(0).split(" ");
    }
    
    public void dfs(int depth, String now, String route, String[][] tickets){
        if(depth==tickets.length){
            list.add(route);
            return;
        }
        
        for(int i=0; i<tickets.length; i++){
            if(now.equals(tickets[i][0]) && !used[i]){
                used[i] = true;
                dfs(depth+1, tickets[i][1], route+" "+tickets[i][1], tickets);
                used[i] = false;
            }
        }
    }
}