Java/코딩테스트

프로그래머스 여행경로 Java

Bubbles 2023. 5. 4. 17:04

🍭 필요한 로직 

모든 티켓을 다 사용해야 한다 -> DFS

갈 수 있는 경로가 여러가지라면 알파벳 순으로 -> 우선순위 큐에 넣기(자동으로 정렬이 된다) / 백트래킹으로 가능한 경우의 수 탐색

티켓을 다 사용했다면 경로를 기록하기 -> 문자열 형태로 경로 저장해놨다가 꺼내는 방식을 씀

-> String path에 공백 간격을 두고 저장, 나중에 queue.poll().split(" ")로 answer 배열에 저장하면 된다.

-> 우선순위 큐에서 알아서 알파벳 순서가 가장 빠른걸로 정렬해준다

 

 

🍭코드 

import java.util.*;
class Solution {
    public PriorityQueue <String> queue;
    public boolean[] visited;
    public String[] solution(String[][] tickets) {
        queue = new PriorityQueue<>();
        visited = new boolean[tickets.length];
        DFS(0, "ICN", "ICN", tickets);
        String[] answer = queue.poll().split(" ");
        return answer;
    }
    
    // 지금 있는 위치, 현재 몇개의 티켓을 사용했는지, 현재까지의 경로(문자열로 표기 가능)
    public void DFS(int used, String now, String path, String[][] tickets) {
        if (used == tickets.length) {
            queue.add(path);
            return;
        }
        for (int i = 0; i < tickets.length; i++) {
            if (!visited[i] && tickets[i][0].equals(now)) {
                visited[i] = true;
                DFS(used+1, tickets[i][1], path + " " + tickets[i][1], tickets);
                visited[i] = false;
            }
        }
    }
}