์ง์ธ์ ๋์์ผ๋ก ๋ฌธ์ ํด๊ฒฐ ! ๋ก์ง์ ๋ฌธ์ ๋ ์๊ณ .. ๋น์ฐ ๋ฐ๋ก๋ ์๊ณ .. ๊ทธ์ ์ฝ๋ ๋ฑ ํ๊ธ์ ์๋ชป๋์๋ค๋.. ใ ใ .. ๋๋ฒ๊น ํ๋ฉด์ ์ ๋ชฐ๋๋์ง ์๋ฌธ์ ๋๋ค ์ง์ง ์์ญ๋ฒ .. ํ๋๋ฐ ! ๋ค์ ๊ธ์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด ๊ธ๋ก ๋ค์ ์ฐ๋ฉด์ ์ ๊ฐ ์๋ชป ํ์๋ ๋ถ๋ถ๋ ๋ น์ฌ๋ณด๊ฒ ์๋๋ค !
์ฌ๋ฌ๋ถ ๋์์ฃผ์ธ์.. ์ค๋ ํ๋ฃจ ์ข
์ผ ์ด๊ฒ๋ง ๊ณ ๋ฏผํ ๊ฒ ๊ฐ์์.. ๐ญ ๋ฌธ์ ์ ๋ฌธ๊ณผ ํ์ด ์ฝ๋๋ ๋ค์ ์ด์ด์ง๊ณ , ์ฐ์ ์ ๊ฐ ๋ฌด์๋๋ฌธ์ ๊ณ ์ถฉ์ ๊ฒช๊ณ ์๋์ง ๋จผ์ ์ค๋ช
ํด ๋ณด๊ฒ ์ต๋๋ค. ( ์ ๋ ์ด๋ฏธ ๋ฌธ์ ๋ฅผ ์๊ณ , ์ฌ์ง์ด ๊ณ ๋ฏผ์ ๋ช ์๊ฐ์ ํ ํ์ ์์ฑํ๋ ๊ฒ์ด๋ผ์ ์์ธํ ์ด๋ค๊ณ ํด๋ '์์จ ๋์๋ฌ๋ผ๋๋ ๋ญ ์๋ฆฌ์ผ;' ์ถ์ ์ ์์ด์ ใ
ใ
กใ
ํน ๊ทธ๋ฌ์๋ค๋ฉด ์๋์ ๋ฌธ์ ์ ๋ฌธ์ ๋ณด๊ณ ์ค์๋ ๊ฑธ ์ถ์ฒ๋๋ ค์ ! )
[ ๊ฐ๋จํ ๋ฌธ์ ์์ฝ ]
์๋์์ ์ค๋ช ํ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ทธ๋ํ์์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๋ ๊ฒฝ๋ก์ค์์ ์ํ๋ฒณ ์์๊ฐ ๋ ๋น ๋ฅธ ๊ฒฝ์ฐ๋ฅผ ๋์ถํ๋ ๋ฌธ์ ์ ๋๋ค.
- ๊ฐ ๋ ธ๋๋ ๋ ๋จ์ด๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
- ๋ ธ๋์ ์ฐ๊ฒฐ์ ์ค๋ช ํ์๋ฉด, ํ ๋ ธ๋์ ๋ ๋ฒ์งธ ๋จ์ด์ ๋ค๋ฅธ ๋ ธ๋์ ์ฒซ ๋ฒ์งธ ๋จ์ด๊ฐ ์ผ์นํ๋ค๋ฉด ํด๋น ๋ ธ๋๋ก ์ด๋ํ ์ ์์ต๋๋ค.
- ์ฆ, [A - B]๋ ธ๋์์ [B - A]๋ ธ๋๋ก๋ ์ด๋ํ ์ ์์ง๋ง, [A - B]์์ [C - A]๋ก๋ ์ด๋ํ ์ ์๋ ๊ฒ์ ๋๋ค.
- ์ ์์ ๊ฒฝ์ฐ ๊ฒฝ๋ก๋ ABA๊ฐ ๋๋ ๊ฒ์ ๋๋ค.
- ์๋ ๋ฌธ์ ๋ฅผ ์ฝ๊ณ ์ค์ จ๋ค๋ฉด, ์ ๋ ํฐ์ผ ํ๋๋ฅผ ๋ ธ๋๋ก ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ํผ ๊ฒ์ ๋๋ค !
์ ๋ ์ด ๋ฌธ์ ๋ฅผ ์๋์ 1๋ฒ ๋ฐฉ๋ฒ์ผ๋ก ๋จผ์ ํ์์ต๋๋ค. ํ์ง๋ง ํ ์คํธ ์ผ์ด์ค ํ๋๊ฐ ํ๋ฆฌ๋ค๊ณ ๋์๊ณ ์ ํ๋ฆฌ๋์ง ์ดํดํ ์ ์์์ต๋๋ค. ํ์ ํน์๋ ํ๋ ๋ง์์ 2๋ฒ ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ํ์ด๋ณด์๋๋ ๋ค ๋ง์๋ค๊ณ ๋์์ต๋๋ค.
๊ฐ ํ์ด ๋ฐฉ๋ฒ์ ์๋์ ์ฝ๋๋ฅผ ์ ์ผ๋ฉด์ ์์ธํ ์ค๋ช ํ๊ฒ ์ง๋ง, ์ ๊ฐ ์๊ฐํ๋ 1๋ฒ๊ณผ 2๋ฒ์ ์ ์ผํ ์ฐจ์ด๋ ์๋์ ๊ฐ์ต๋๋ค.
์ ๋ 1๋ฒ์ด ๋ชจ๋ ๊ฒฝ์ฐ๋ฅผ ๋ค ํ์ํ์ง ์๊ณ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋ฐ๊ฒฌํ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ก ๋ฐํํ ์ ์์ด์ ์๊ฐ๋ณต์ก๋ ์ธก๋ฉด์์ ๋ ํจ์จ์ ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด์๋ ์ด ๊ฒฝ๋ก๊ฐ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ ์ ์๋ ๋ชจ๋ ๊ฒฝ๋ก ์ค์์ ์ํ๋ฒณ ์์๋ก ๊ฐ์ฅ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๋ณด์ฅํ ์ ์๋๋ก ๋ฏธ๋ฆฌ ๋ ๋ฒ์งธ ๋จ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๋ฒณ์ ์ ๋ ฌ์ ํด๋์์ต๋๋ค.
๋ ๋ฒ์งธ ๋จ์ด ๊ธฐ์ค์ผ๋ก ์ํ๋ฒณ์ ์ ๋ ฌ์ ํ๋ ๊ฒ์ด ๊ฒฝ๋ก์ ์ํ๋ฒณ์์ด ๋๋ค๋ ๊ฒ์ ๋ณด์ฅํ๋ค๊ณ ์๊ฐํ๋ ์ด์ ๋ ์๋์ ๊ฐ์ต๋๋ค.
์ด์ ํ์์ฐ ์์์
๋๋ค..
๋๋์ฒด ์ ! 1๋ฒ ํ์ด๊ฐ ํ๋ฆฐ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค ใ
ใ
กใ
์ ์๊ฐ์ 1๋ฒ์ ํ๋ฆฌ๊ณ 2๋ฒ์ด ๋ง์ผ๋ ค๋ฉด 1๋ฒ์ผ๋ก ํ์์ ๋, ์ฆ, ๋ ๋ฒ์งธ ๋จ์ด ์์ผ๋ก ์ ๋ ฌํด๋๊ณ ํ์ํ ๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฐ์ฅ ๋จผ์ ๋ฐ๊ฒฌํ ๊ฒฝ๋ก๊ฐ ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ชจ๋ ๊ฒฝ๋ก ์ค์์ ์ํ๋ฒณ์์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด์ง ์๋ค๋ ๊ฒ์ธ๋ฐ..
์ฆ, ๋ ๋ฒ์งธ ๋จ์ด ์์ผ๋ก ์ ๋ ฌํด๋๊ณ ํ์ํ ์ต์ข ๊ฒฝ๋ก๊ฐ (๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒฝ๋ก ์ค์์) ์ํ๋ฒณ์์ผ๋ก ๊ฐ์ฅ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค.. ์ํ๋ฒณ์์ผ๋ก ๋ ๋น ๋ฅธ ๋ค๋ฅธ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ ์ ์๋ค๋ ๊ฒ์ธ๋ฐ..
๊ทธ๋ฐ ๋ฐ๋ก๊ฐ ๋์ ํ ๋ ์ค๋ฅด์ง ์์ต๋๋ค.. ( ๊ทธ ๋ฐ๋ก๊ฐ 1๋ฒ ํ ์คํธ ์ผ์ด์ค๊ฒ ์ฃ .. )
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ "ICN" ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
tickets | return |
---|---|
[["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] | ["ICN", "JFK", "HND", "IAD"] |
[["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] | ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] |
import java.util.*;
class Solution {
public static String[] answer; // ๊ฒฝ๋ก๊ฐ ์์๋๋ก ์ ์ฅ๋ ๋ฐฐ์ด
public static boolean[] visited; // DFS ๋ฐฉ๋ฌธ ์ฒดํฌ
// ๋ชจ๋ ๊ฒฝ๋ก ํ์ํ์ง ์๊ณ ์ฒซ ๋ฒ์งธ๋ก ๋ชจ๋ ๋
ธ๋ ๋ฐฉ๋ฌธ ๊ฒฝ๋ก๊ฐ ์๊ธฐ๋ ๊ฒฝ์ฐ ํ์์ ๋ฉ์ถ๊ธฐ ์ํ ํ๋๊ทธ
public static boolean flag = false;
// DFS ํจ์
// param : ํฐ์ผ ๋ฆฌ์คํธ, ์์ ํฐ์ผ์ ์ธ๋ฑ์ค, ๋ฐฉ๋ฌธ ์์
public static void dfs(String[][] tickets, int start, int count){
visited[start] = true; // ์ฒซ ๋
ธ๋ ๋ฐฉ๋ฌธ ์ฒดํฌ
answer[count] = tickets[start][0]; // count๋ฒ์งธ ๊ฒฝ๋ก ๋ฃ๊ธฐ
// ์ถ๋ฐ์ง ๊ธฐ์ค์ผ๋ก ๊ฒฝ๋ก๋ฅผ ๋ฃ๊ณ ์๊ธฐ ๋๋ฌธ์
// ๋ง์ง๋ง ํฐ์ผ์ด๋ผ๋ฉด ๋์ฐฉ์ง๋ฅผ ๊ฒฝ๋ก์ ๋ง์ง๋ง์ผ๋ก ๋ฃ์ด์ฃผ๊ธฐ
// ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ๋ฐฉ๋ฌธํ ์ฒซ ๊ฒฝ๋ก์์ผ๋ก ํ์์ ๋ฉ์ถ๊ธฐ ์ํด์
// flag ์ง์ ๋ฐ return
if(count == tickets.length-1){
answer[count+1] = tickets[start][1];
flag = true;
return;
}
// ๋์ฐฉ์ง ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ ์์๋๋ก ํ์
for(int i=0; i<tickets.length; i++){
// ํ์ฌ ํฐ์ผ์ ๋์ฐฉ์ง๊ฐ ์ถ๋ฐ์ด๋ฉด์ ( ๋ค์ ํฐ์ผ ํ๋ณด )
// ์ฌ์ฉํ์ง ์๋ ํฐ์ผ ์ฐพ๊ธฐ
if(tickets[i][0].equals(tickets[start][1]) && !visited[i]){
dfs(tickets, i, count+1); // ์ฌ๊ท์ ์ผ๋ก ํ์
if(flag) return; // flag ์ฒดํฌํด์ ๊ฒฝ๋ก ์ฐพ์์ผ๋ฉด ๋น ๋ฅด๊ฒ ์ข
๋ฃํ๊ธฐ
// dfs ํจ์๋ฅผ ๋น ์ ธ๋์์ผ๋ flag๋ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ
// ์ฆ ํด๋น ๊ฒฝ๋ก๊ฐ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ค
// ์ฌ๊ท๋ ๋น ์ ธ๋์๊ณ ๋ค์ ๋
ธ๋ ํ์์ธ๋ฐ
// ๊ทธ๋ฌ๊ธฐ ์ํด์ ๋น ์ ธ๋์จ ํฐ์ผ์ ์ฌ์ฉํ์ง ์์ ๊ฒ์ด๋ฏ๋ก ๋ค์ ์ฒดํฌ !
visited[start] = false;
}
}
}
public static String[] solution(String[][] tickets) {
answer = new String[tickets.length+1];
visited = new boolean[tickets.length];
// ๋์ฐฉ์ง ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๊ธฐ
Arrays.sort(tickets, new Comparator<String[]>() {
@Override
public int compare(String[] o1, String[] o2) {
return o1[1].compareTo(o2[1]);
}
});
for(int i=0; i<tickets.length; i++){
if(tickets[i][0].equals("ICN")){
// ICN์ด ์ถ๋ฐ์ง์ธ ๋
ธ๋๊ฐ ์ฌ๋ฌ๊ฐ์ผ๋
// ๋จผ์ ์์นํ, ์ฆ ๋์ฐฉ์ง๊ฐ ๋ ๋น ๋ฅธ ICN ๋
ธ๋๋ฅผ ์์์ผ๋ก ํ ๋
// ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ธฐ ์ํจ
Arrays.fill(visited, false);
dfs(tickets, i, 0);
// ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ dfs๊ฐ ์ข
๋ฃ๋์๋ค๋ฉด ๊ทธ๊ฒ ๊ฒฐ๊ณผ๋๊น ์ข
๋ฃ !
if(flag) break;
}
}
return answer;
}
}
import java.util.*;
class Solution {
// ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ๋ฌธ์์ด ํ์์ผ๋ก ์ ์ฅํ๋ Arraylist
public static ArrayList<String> answers = new ArrayList<>();
public static boolean[] visited; // DFS ๋ฐฉ๋ฌธ ์ฒดํฌ
// DFS ํจ์
// param : ํฐ์ผ ๋ฆฌ์คํธ, ์์ ๋๋ผ(ICN), ๋ฐฉ๋ฌธ ์นด์ดํธ, ๋ฐฉ๋ฌธ ๊ฒฝ๋ก ๋ฌธ์์ด
public static void dfs(String[][] tickets, String start, int count, String answer){
// ์์ ๋๋ผ ๊ฒฝ๋ก์ ์ถ๊ฐ
answer += (start + " ");
// ๋ชจ๋ ํฐ์ผ ์ฌ์ฉ ์๋ฃ์ด๋ฏ๋ก ๊ฒฝ๋ก๋ฆฌ์คํธ์ ์ถ๊ฐ
if(count == tickets.length){
answers.add(answer);
return;
}
for(int i=0; i<tickets.length; i++){
// ํ์ฌ ํฐ์ผ์ ๋์ฐฉ์ง๊ฐ ์ถ๋ฐ์ด๋ฉด์ ( ๋ค์ ํฐ์ผ ํ๋ณด )
// ์ฌ์ฉํ์ง ์๋ ํฐ์ผ ์ฐพ๊ธฐ
if(tickets[i][0].equals(start) && !visited[i]){
visited[i] = true; // ํฐ์ผ ์ฌ์ฉ ์ฒดํฌ
dfs(tickets, tickets[i][1], count+1, answer); // ์ฌ๊ท ํ์
// ์ฌ๊ท๋ฅผ ๋น ์ ธ๋์์ ๋ค๋ฅธ ๊ฒฝ๋ก ํ์
// ๊ทธ๋ฌ๊ธฐ ์ํด์ ๋น ์ ธ๋์จ ๊ฒฝ๋ก๋ ๋ฐฉ๋ฌธํ์ง ์์ ์ํ๋ก ๋ค์ ์ฒดํฌ !
visited[i] = false;
}
}
}
public static String[] solution(String[][] tickets) {
visited = new boolean[tickets.length];
dfs(tickets, "ICN", 0, "");
// ๋ชจ๋ ๋
ธ๋ ๋ฐฉ๋ฌธํ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ฌ
Collections.sort(answers);
// ๊ฐ์ฅ ์์ ์ ๋ ฌ๋ ๊ฒ์ ์ต์ข
๊ฒฐ๊ณผ๋ฌผ์ ํํ๋ก ๋ณํํ์ฌ ๋ฐํ
return answers.get(0).split(" ");
}
}
LeetCode 332 ์ผ์ ์ฌ๊ตฌ์ฑ ๋ฌธ์ ๋ ๋๊ฐ์ ๋ฌธ์ ์ธ๋ฐ, ์ ๋ ์๋ TC์์ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค
์ ๋ ฅ: [["JFK","KUL"],["JFK","NRT"],["NRT","JFK"]]
์ถ๋ ฅ: ["JFK","KUL","NRT","JFK"]
์ ๋ต: ["JFK","NRT","JFK","KUL"]
ํ๋ฒ ํ์ธํด๋ณด์ธ์!
(์๋ฐ ์ฝ๋๋ ์ ๋ชจ๋ฅด๊ฒ ๊ณ ...ใ ใ )