ํด๋น ๊ฒ์๊ธ์ longroadhome๋์ [ํ๋ก๊ทธ๋๋จธ์ค] LV.3 ์ฌํ๊ฒฝ๋ก (JS) ์์ค์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ๋ง๋ค์ด์ง ๊ฒ์๋ฌผ์์ ๋ฏธ๋ฆฌ ๋ฐํ๋๋ค.
๋ฌธ์ ์ค๋ช
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ด์ฉํ์ฌ ์ฌํ๊ฒฝ๋ก๋ฅผ ์ง๋ ค๊ณ ํฉ๋๋ค. ํญ์ "ICN" ๊ณตํญ์์ ์ถ๋ฐํฉ๋๋ค.
ํญ๊ณต๊ถ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด tickets๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ฐฉ๋ฌธํ๋ ๊ณตํญ ๊ฒฝ๋ก๋ฅผ ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
๋ชจ๋ ๊ณตํญ์ ์ํ๋ฒณ ๋๋ฌธ์ 3๊ธ์๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ฃผ์ด์ง ๊ณตํญ ์๋ 3๊ฐ ์ด์ 10,000๊ฐ ์ดํ์
๋๋ค.
tickets์ ๊ฐ ํ [a, b]๋ a ๊ณตํญ์์ b ๊ณตํญ์ผ๋ก ๊ฐ๋ ํญ๊ณต๊ถ์ด ์๋ค๋ ์๋ฏธ์
๋๋ค.
์ฃผ์ด์ง ํญ๊ณต๊ถ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋ง์ผ ๊ฐ๋ฅํ ๊ฒฝ๋ก๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ์ํ๋ฒณ ์์๊ฐ ์์๋ ๊ฒฝ๋ก๋ฅผ return ํฉ๋๋ค.
๋ชจ๋ ๋์๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ๋ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
์ ์ถ๋ ฅ ์ ์ค๋ช
์์ #1
["ICN", "JFK", "HND", "IAD"] ์์ผ๋ก ๋ฐฉ๋ฌธํ ์ ์์ต๋๋ค.
์์ #2
["ICN", "SFO", "ATL", "ICN", "ATL", "SFO"] ์์ผ๋ก ๋ฐฉ๋ฌธํ ์๋ ์์ง๋ง ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] ๊ฐ ์ํ๋ฒณ ์์ผ๋ก ์์ญ๋๋ค.
ํ์ด ์์
function solution(tickets) {
// ์ ๋ ฌ ๋จผ์
tickets = tickets.sort()
const visited = []
let course = []
// ์ด๋ป๊ฒ ์ดํํ ์ง๋ฅผ ํ์ธํ๋ ํจ์ ์์ฑ DFS ์ฌ์ฉ
function getCourse(cur,num) {
course.push(cur)
// ์ฝ์ค๊ฐ ๋ค ์ง์ฌ์ก๋ค๋ฉด ์ข
๋ฃ
if(num === tickets.length+1) {
return true
}
for(let i = 0 ;i < tickets.length ; i ++) {
// ์ถ๋ฐ์ง๊ฐ ํ์ฌ ๊ณตํญ๊ณผ ๊ฐ๊ณ ๋ฐฉ๋ฌธํ ์ ์ด ์๋ ๊ฒฝ์ฐ
if(!visited[i] && tickets[i][0] === cur) {
visited[i] = true
// ๋ค์ ํ์ ์ง๋ฅผ ๋ฃ์ด ์ฌ๊ท
if(getCourse(tickets[i][1],num+1)) return true
// ํด๋น ๊ฒฝ๋ก์์ ๊ณตํญ์ ๋ฐฉ๋ฌธํ ์ ์๋ ๊ฒฝ์ฐ ๋ฐฉ๋ฌธ ๊ธฐ๋ก ์ญ์
visited[i] = false
}
}
// ๋ฐ๋ณต์ ํ์์๋ ์๋ง์ ํ์ ์ง๋ฅผ ์ฐพ์ง ๋ชปํ๊ฒฝ์ฐ ๊ฒฝ๋ก์์ ์ญ์ ํ false๋ฐํ
course.pop()
return false
}
getCourse('ICN',1)
return course
}
DFS์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ ์ ๋ ฅ ์์ ๊ฐ ๋ง์ ๊ฒฝ์ฐ ์ฝ์คํ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก ํ์คํ์ ์ ๊ทน ํ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
ํ์ง๋ง ํด๋น ๋ฌธ์ ์ ๊ฒฝ์ฐ ์ ๋ ฅ ์์ ์ ์๊ฐ ๋ง์ง ์์ผ๋ฏ๋ก ์ฌ๊ทํจ์๋ก ์คํํ์์.