์ ๊ทผ๋ฐฉ๋ฒ๐ก
๋ชจ๋ ํฐ์ผ๋ค์ ์ถ๋ฐ์ง๋ฅผ ํค๊ฐ์ผ๋ก ํ๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ธฐ
์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌ
dfs๋ก ํ์
ํ์ถ ์กฐ๊ฑด์ ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ tickets์ length์ ๊ฐ์ ๋
function solution(tickets) {
const adjacencyList = {};
let result=[];
//์ธ์ ๋ฆฌ์คํธ [key=์ถ๋ฐ์ง]:๋์ฐฉ์ง[]
tickets.forEach(t=>{
const [dep, arr]=t;
const tmp=adjacencyList[dep]||[];
tmp.push(arr);
adjacencyList[dep]=tmp;
});
//์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌ
for(key in adjacencyList){
adjacencyList[key].sort();
}
//์ฌ๊ทํจ์ dfs
//path=์ง๊ธ๊น์ง์ ๊ฒฝ๋ก, dep=์ถ๋ฐ์ง
//๋ฐฑํธ๋ํน์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ธ์๋ก ์ง๊ธ๊น์ง ๊ฒฝ๋ก๋ฅผ ๋ด์ ๋ฐฐ์ด์ ์ ๋ฌํด์ค
function dfs(path, dep){
//ํ์ถ ์กฐ๊ฑด = ๊ฒฝ๋ก์ ๊ธธ์ด๊ฐ total๊ฐ ๊ฐ์ ๋
if(path.length===tickets.length){
//result ๋ฐฐ์ด์ ๋ง์ง๋ง์ผ๋ก ๋ฐ์ dep๊ฐ ๋ฃ์ด์ฃผ๊ธฐ
result = [...path, dep];
return true;
}
const temp=adjacencyList[dep]?[...adjacencyList[dep]]:[];
temp?.forEach(city=>{
//๋ฆฌ์คํธ๋ฅผ ํ๋ผ๊ณ ์๊ฐํ๊ณ ๋งจ ์์ ๋์๋ฅผ popํ๊ณ
//๋ค์ dfs๋ก ํ์
adjacencyList[dep].shift();
if(dfs([...path, dep], city)){
return true;
};
//์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ๋ชปํ์ ๊ฒฝ์ฐ
//์ ๊ฑฐํ๋ ๋์๋ฅผ ๋ค์ ๋ค์ ๋ฃ์ด์ค
adjacencyList[dep].push(city);
})
return false;
}
dfs([],"ICN");
return result;
}
https://school.programmers.co.kr/learn/courses/30/lessons/4316
'๐ง ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]๊ด๋ฌผ ์บ๊ธฐ JS (0) | 2023.12.27 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์์์ฐพ๊ธฐ JS (0) | 2023.12.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] ํ๊ฒ ๋๋ฒ JS (1) | 2023.12.27 |
[ํ๋ก๊ทธ๋๋จธ์ค]๋ ์ ์ฌ์ด์ ์ ์ ์ JS (0) | 2023.12.27 |
[ํ๋ก๊ทธ๋๋จธ์ค]์ฐ์๋ ๋ถ๋ถ ์์ด์ ํฉ JS (1) | 2023.12.27 |