|
์ฝ๋ ์์ฑํ๊ธฐ
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
public class Solution {
// ๋ฐฉ๋ฌธํ ๊ณณ ์ฒ๋ฆฌ
static boolean visited[];
// ๊ฐ ๋ฃจํธ๋ค์ ์ ์ฅํฉ๋๋ค.
static ArrayList<String> savedRoute;
// ticket[0] -> ticket[1]๋ก ๊ฐ๋ ํญ๊ถ๊ถ.
public String[] solution(String[][] tickets) {
String[] answer = {};
// ๋ฐฉ๋ฌธํ ๊ณณ ์ด๊ธฐํ
visited = new boolean[tickets.length];
// ๋ชจ๋ ๋ฐฉ๋ฌธํ์์์ ์ฒดํฌํด์ผํ๋ค.
int count = 0;
// ๊ฐ ๋ฃจํธ๋ค ์ด๊ธฐํ
savedRoute = new ArrayList<>();
// ์ถ๋ฐ์
String start = "ICN";
// ๋ฃจํธ ์ ์ฅ(ICN๋ถํฐ ์ถ๋ฐํ๋ฏ๋ก ICN์ ์
๋ ฅ)
String route = "ICN";
dfs(start, route, tickets, count);
Collections.sort(savedRoute);
answer = savedRoute.get(0).split(" ");
return answer;
}
void dfs(String start, String route, String[][] tickets, int count) {
// ๋ชจ๋ ๊ณตํญ์ ๋ค ๋์๋ค๋
๋ค๋ฉด, ์ ์ฅ๋ ๋ฌธ์์ด์ ์ด๋ ์ด๋ฆฌ์คํธ์ ์ ์ฅํ๋ค.
if (count == tickets.length) {
savedRoute.add(route);
}
// ๋ชจ๋ ๊ณตํญ์ ๋ค ๋์๋ค๋
์ผ ํ๋ฏ๋ก ํฐ์ผ๋งํผ ์ด๋.
for (int i = 0; i < tickets.length; i++) {
// ์์์ ๊ณผ ํฐ์ผ์ ์ถ๋ฐ์ ์ด ๊ฐ๊ณ , ๋ฐฉ๋ฌธํ์ง ์์์ ๊ฒฝ์ฐ
// ์ด์ ๋์ฐฉ์ ์ธ [i-1][1]๊ณผ [i][0]์ด ๋์ผํด์ผํ๋ค.(๊ทธ๋์ผ ์ ๋์ฐฉํ ๊ฒ)
if (start.equals(tickets[i][0]) && !visited[i]) {
// ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
visited[i] = true;
// A->B๋ก ๊ฐ์ผ๋ฏ๋ก B๊ณตํญ์์ ->C๋ก ๊ฐ์ผํ๋ค.
// ๊ทธ๋ฌ๋ฏ๋ก ์์์ ์ด B๊ณตํญ์ด ๋์ด์ผํ๋ฏ๋ก ticket[i][1]์ด ๋๋ค.
dfs(tickets[i][1], route + " " + tickets[i][1], tickets, count + 1);
visited[i] = false;
}
}
}
public static void main(String[] args) {
Solution s = new Solution();
String[][] tickets = {
/*y=0*/ /*y=1*/
/*x=0*/{"ICN", "SFO"},
/*x=1*/{"ICN", "ATL"},
/*x=2*/{"SFO", "ATL"},
/*x=3*/{"ATL", "ICN"},
/*x=4*/{"ATL", "SFO"}
};
System.out.println(Arrays.toString(s.solution(tickets)));
}
}
Java
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ