[프로그래머스] 여행경로

awmaker·2021년 7월 25일

Algorithm

목록 보기
6/9
post-thumbnail

[프로그래머스] 여행경로

const solution = (ticketsArray) => {
    const tickets = {}
    let answer = null

    // Array => Object 형태 변경
    ticketsArray.forEach((ticket) => {
        if (tickets[ticket[0]]) {
            tickets[ticket[0]].push(ticket[1])
        } else {
            tickets[ticket[0]] = [ticket[1]]
        }
    })
    // 변환된 데이터: tickets
    // {Icn: [Boo, Doo], 출발지2: [목적지1, 목적지 3]...}

    // 티켓 알파벳 순 정렬
    Object.values(tickets).map((ticket) => ticket.sort())

    // 남은 티켓 세기
    const getTicketCount = (tickets) =>
        Object.values(tickets).reduce((prev, curr) => prev + curr.length, 0)

    // DFS
    const dfs = (now, tickets, route) => {
        const newRoute = [...route, now]
        const destinations = tickets[now]

        if (answer) return
        if (getTicketCount(tickets) === 0) {
            answer = newRoute
            return
        }
        if (!destinations || !destinations.length) return

        destinations.map((destination, idx) => {
            let copiedTickets = JSON.parse(JSON.stringify(tickets))
            copiedTickets[now].splice(idx, 1)
            dfs(destination, copiedTickets, newRoute)
        })
    }

    dfs('ICN', tickets, [])
    return answer
}
profile
From design to DevOps with frontend and backend.

0개의 댓글