본문 바로가기

코딩테스트 연습/programmers

[프로그래머스] 여행경로 - JAVA

if (finished) return; 조건 추가 할 생각을 못하고

완성 경로를 찾은 뒤에도 DFS를 계속 돌게해서 푸는데 좀 시간이 걸렸다.

 

import java.util.*;
class Solution {
    static boolean visited[];
    static String[] s;
    static String[] answer;
    static boolean finished;
    public String[] solution(String[][] tickets) {
        visited = new boolean[tickets.length];
        s = new String[tickets.length+1];
        answer = new String[tickets.length+1];
        Arrays.sort(tickets, (a, b) -> {
            // 1️⃣ 먼저 출발지(첫 번째 요소) 비교
            if (!a[0].equals(b[0])) {
                return a[0].compareTo(b[0]);
            }
            // 2️⃣ 출발지가 같다면 도착지 비교
            return a[1].compareTo(b[1]);
        });
        
        answer[0] = "ICN";
        dfs(tickets, "ICN", 0, tickets.length, s);
        
         for(int i=0;i<tickets.length;i++){
            for(int j=0;j<2;j++){
                System.out.print(tickets[i][j] + " ");
            }
                 System.out.println();
         }
        
        return answer;
    }
    
    static void dfs(String[][] tickets, String start, int count, int ticket, String[] s){
        if (finished) return; 
        if(count == ticket){
            for(int i=1;i<s.length;i++) answer[i] = s[i];
            finished = true;
            return;
        }
        
        for(int i=0;i<tickets.length;i++){
            if(start.equals(tickets[i][0])){
                if(!visited[i]){
                    visited[i] = true;
                    s[count+1] = tickets[i][1];
                    dfs(tickets, tickets[i][1], count+1, ticket, s);
                    visited[i] = false;
                    if (finished) return; 
                }
            }
        }
        
    }
}