๐ ๋ฌธ์
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ "ICN" ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ชจ๋ ๊ณตํญ์ ์ํ๋ฒณ ๋๋ฌธ์ 3๊ธ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ฃผ์ด์ง ๊ณตํญ ์๋ 3๊ฐ ์ด์ 10,000๊ฐ ์ดํ์ ๋๋ค.
- tickets์ ๊ฐ ํ [a, b]๋ a ๊ณตํญ์์ b ๊ณตํญ์ผ๋ก ๊ฐ๋ ํญ๊ณต๊ถ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค.
- ์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ง์ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ 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"] |
โ๏ธ ํ์ด
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ธํ๊ธฐ์๋ ๊ณตํญ์ ์๊ฐ 10000๊ฐ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ 10000! ๋ผ๋ ์์ฒญ๋๊ฒ ํฐ ์์ ๊ฒฝ์ฐ์ ์๊ฐ ๋์ค๋ฏ๋ก ์์ ํ์์ ์ ์ด์ ์์๋ ํ์ง ์์๋ค.
DFS๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด ์ถ๋ฐ์ง์ ๋์ฐฉ์ง๊ฐ ๋ค์ด์๋ tickets ๋ฐฐ์ด์ ์ํํ๋ฉฐ ๊ทธ๋ํ๋ฅผ ๊ตฌ์ฑํ๋ค. ๊ทธ๋ํ๋ ์ถ๋ฐ์ง๋ฅผ ํค๋ก ๊ฐ์ง๊ณ ๋์ฐฉ์ง๋ฅผ ๋ฐฐ์ด์ ์์๋ก ์ก์๋ค. ๊ฒฝ๋ก๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์ผ๋ก ์ ์ผ ์์๋ ๊ฐ์ ์ถ๋ ฅํด์ค์ผํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ํ์ ๋์ฐฉ์ง ๋ฐฐ์ด์ ์ ๋ ฌํด์ฃผ๋ฉฐ ๋์ฐฉ์ง์ ๊ฐ์๋๋ก ์ฌ์ฉํ ํญ๊ณต๊ถ์ ์ฒดํฌํ ๋ฐฐ์ด์ ๋ง๋ค์ด์คฌ๋ค.
์ถ๋ฐ์ง๋ ๋ฌด์กฐ๊ฑด ์ธ์ฒ(ICN)์ด๋ฏ๋ก ๋ต์ด ๋ ์์ ๋ฐฐ์ด์ ICN๋ฅผ ๋ฃ์ด๋๊ณ ํ์ฌ ๋์์ ์ฌ์ฉํ ํฐ์ผ์(cnt)๋ฅผ ์ธ์๋ก ๋ฃ์ด์ฃผ๋ฉฐ DFS๋ฅผ ๋๋ ธ๋ค. ๋ง์ฝ ์ด๋ฏธ ์ฌ์ฉํ ํญ๊ณต๊ถ์ธ ์๋ ๊ฒฝ์ฐ์๋ง ์์ ์ ๋ต ๋ฐฐ์ด์ ๋์ฐฉ์ง๋ฅผ ์ถ๊ฐํ๊ณ ์ฒดํฌ๋ฐฐ์ด์ ์ฒดํฌํ ์ดํ ์ฌ๊ท ํ์์ผ๋ก DFS๊ฐ ๋ ๋์๊ฐ๋ค. ๋๋ค๊ฐ ์ฌ์ฉํ ํฐ์ผ์ ์๊ฐ ์ด ํฐ์ผ์ ์์ ๋์ผํ๋ค๋ฉด ๋ชจ๋ ํฐ์ผ์ ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ฏ๋ก answer์ ์์ ์ ๋ต๋ฐฐ์ด์ ํ ๋นํ๋ค. answer์ ๊ฐ์ด ์ ๋ ฅ๋ ์ดํ์๋ DFS๊ฐ ๋์๊ฐ๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ flag๋ฅผ true, false๋ก ๊ด๋ฆฌํ๋ค.
๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ง๋ ๋ก์ง์ธ๋ฐ๋ ๋ถ๊ตฌํ๊ณ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ์๋๋ฐ ํ์ฌ ๋์๊ฐ ๊ทธ๋ํ ๋ด์ ์ถ๋ฐ์ง๋ก ๊ตฌ์ฑ์ด ์๋์ด์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ undefind๋ฅผ for๋ฌธ์ผ๋ก ๋๋ ธ๊ธฐ ๋๋ฌธ์ด์๋ค. ๊ทธ๋ํ ๋ด์ ๋์ฐฉํ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋ ๊ฒฝ์ฐ์๋ returnํจ์ผ๋ก์จ ๋๊ณ ์๋ DFS๋ฅผ ์ข ๋ฃ์์ผ์ฃผ๋ ํต๊ณผ๋์๋ค.
โจ๏ธ ์ฝ๋
function solution(tickets) {
var answer = [];
const len = tickets.length;
const graph = {};
for (const ticket of tickets) {
const [start, end] = ticket;
if (!graph[start]) graph[start] = [end];
else graph[start].push(end);
}
const check = {};
for (const key of Object.keys(graph)) {
graph[key].sort();
check[key] = new Array(graph[key].length).fill(0);
}
const path = ['ICN'];
let isFinish = false;
const dfs = (city, cnt) => {
if (!graph[city]) return;
for (let i = 0; i < graph[city].length; i++) {
if (isFinish) return;
if (!check[city][i]) {
path.push(graph[city][i]);
check[city][i] = 1;
cnt += 1;
if (cnt === len) {
isFinish = true;
answer = [...path];
return;
}
dfs(graph[city][i], cnt);
cnt -= 1;
check[city][i] = 0;
path.pop();
}
}
};
dfs('ICN', 0);
return answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ด์ค์ฐ์ ์์ ํ (0) | 2023.02.25 |
---|---|
[Algorithm] ์ผ๊ทผ ์ง์ (0) | 2023.02.24 |
[Algorithm] ๊ธฐ์ง๊ตญ์ค์น (0) | 2023.02.22 |
[Algorithm] ๊ฐ์ฅ ๊ธด ํฐ๋ฆฐ๋๋กฌ (0) | 2023.02.22 |
[Algorithm] ๋จ์ด๋ณํ (0) | 2023.02.21 |