๐Ÿ›ซ[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์—ฌํ–‰๊ฒฝ๋กœ

Chobbyยท2022๋…„ 3์›” 15์ผ
0

Programmers

๋ชฉ๋ก ๋ณด๊ธฐ
14/349

ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์€ 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์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ ์˜ˆ์ œ๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์ฝœ์Šคํƒ ์ดˆ๊ณผ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ์Šคํƒ์„ ์ ๊ทน ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํ•˜์ง€๋งŒ ํ•ด๋‹น ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ์ž…๋ ฅ ์˜ˆ์ œ์˜ ์ˆ˜๊ฐ€ ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ์‹คํ–‰ํ•˜์˜€์Œ.

profile
๋‚ด ์ง€์‹์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€๋‹ดํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€