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;
}
}
}
}
}'코딩테스트 연습 > programmers' 카테고리의 다른 글
| [프로그래머스] 식품분류별 가장 비싼 식품의 정보 조회하기 - MYSQL (0) | 2025.10.20 |
|---|---|
| [프로그래머스] 입국 심사 - JAVA (0) | 2025.10.20 |
| [프로그래머스] 저자 별 카테고리 별 매출액 집계하기 - MYSQL (0) | 2025.10.19 |
| [프로그래머스] 조건에 맞는 사용자와 총 거래금액 조회하기 - MYSQL (0) | 2025.10.19 |
| [프로그래머스] 대여 횟수가 많은 자동차들의 월별 대여 횟수 구하기 - MYSQL (0) | 2025.10.18 |