728x90
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
주어진 항공권을 모두 사용해야함 > BFS보다 DFS 백트래킹이 더 효율적
목적지를 사전순으로 정렬하는 법
// 목적지를 사전순으로 정렬하기
Arrays.sort(tickets, (a,b)-> {
if(a[0].equals(b[0])) return a[1].compareTo(b[1]);
return a[0].compareTo(b[0]);
});
import java.util.*;
class Solution {
static boolean[] visited;
static List<String> route;
static String[][] tickets;
static boolean found = false;
public String[] solution(String[][] tickets) {
this.tickets = tickets;
visited = new boolean[tickets.length];
route = new ArrayList<>();
// 1) 티켓 정렬 (출발지 → 목적지 사전순)
Arrays.sort(tickets, (a, b) -> {
if (a[0].equals(b[0])) return a[1].compareTo(b[1]);
return a[0].compareTo(b[0]);
});
// 2) "ICN"에서 시작
route.add("ICN");
dfs("ICN", 0);
// 3) 리스트를 배열로 변환
return route.toArray(new String[0]);
}
private void dfs(String start, int used) {
if (found) return; // 이미 답 찾았으면 종료 (최초 경로가 사전순)
if (used == tickets.length) {
found = true;
return;
}
for (int i = 0; i < tickets.length; i++) {
if (!visited[i] && tickets[i][0].equals(start)) {
visited[i] = true;
route.add(tickets[i][1]);
dfs(tickets[i][1], used + 1);
if (found) return; // 정답 완성되면 더 안 탐색
route.remove(route.size() - 1);
visited[i] = false;
}
}
}
}'Algorithm > Programmers' 카테고리의 다른 글
| [Lv.3] 길찾기 게임 : Java (0) | 2025.10.18 |
|---|---|
| [Lv.3] 단어 변환 : Java (0) | 2025.10.15 |
| [Lv.2] 최댓값과 최솟값 : Java (0) | 2025.10.14 |
| [Lv.2] 타겟 넘버 : Java (0) | 2025.09.27 |
| [Lv.2] 모음 사전 : Java (0) | 2025.09.26 |