๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ ์•Œ๊ณ ๋ฆฌ์ฆ˜/Programmers

[Javascript/PGS] Lv.3 : ๋ถ€๋Œ€๋ณต๊ท€

728x90
๋ฐ˜์‘ํ˜•

 

https://school.programmers.co.kr/learn/courses/30/lessons/132266#

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 3.

์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ๋ณด๊ณ  BFS ๋ฌธ์ œ๊ฒ ๊ฑฐ๋‹ˆ ์ถ”์ธกํ•˜์˜€๋‹ค.

๋ณดํ†ต ์ขŒํ‘œ(?)๊ฐ€ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ œ๋Š” ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰์œผ๋กœ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๊ธฐ ๋•Œ๋ฌธ์—,,ใ…Žใ…Ž

 

 

1. ์ฒซ ์‹œ๋„ - ํ…Œ์ŠคํŠธ์ผ€์ด์Šค 11๋ฒˆ~15๋ฒˆ ์‹œ๊ฐ„์ดˆ๊ณผ

 

 

 

์™œ ์ดˆ๊ณผ๊ฐ€ ๋‚ฌ๋‚˜ ํ–ˆ๋Š”๋ฐ ๐Ÿ˜ข

JS๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ‘ธ๋Š”๊ฒŒ ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ bfs๋ฅผ ๋ฐ˜๋ณต๋ฌธ์— ๋„ฃ์–ด๋ฒ„๋ฆฐ ํƒ“์ด์—ˆ๋‹ค.

๋ฐ”๊พธ๋Š” ๊น€์— ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค๋„ ์กฐ๊ธˆ์”ฉ ๋” ์งง๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋‹ค.

(Map.get ์œผ๋กœ ๋ฐ์ดํ„ฐ ์œ ๋ฌด ํ™•์ธ -> Map.has๋กœ ํ™•์ธํ•˜๋Š” ๋“ฑ)


 

2. ๋‘๋ฒˆ์งธ ์‹œ๋„ - ์„ฑ๊ณต

 

์ค‘์š”ํ•œ ์•„์ด๋””์–ด ์ค‘ ํ•˜๋‚˜๋Š”, ์ถœ๋ฐœ์ง€๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋„์ฐฉ์ง€๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š”๊ฒŒ ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋„์ฐฉ์ง€๋Š” 1๊ฐœ๋กœ ๊ณ ์ •์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋„์ฐฉ์ง€๋ถ€ํ„ฐ ๊ฑฐ๊พธ๋กœ ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•˜๋ฉด์„œ ๊ฐ ๋…ธ๋“œ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ €์žฅํ•œ ๋‹ค์Œ

๋งˆ์ง€๋ง‰์— ํ•„์š”ํ•œ ๋…ธ๋“œ์˜ ๊ฑฐ๋ฆฌ๊ฐ’๋งŒ ์ถ”์ถœํ•˜๋ฉด ๋œ๋‹ค.

 

 

๋‚˜์˜ ํ’€์ด

let answer = [];
let roadmap = new Map();

const bfs=(destination, time, sources, n)=>{
    let visited = new Array(n+1).fill(-1); // ๊ธฐ๋ณธ๊ฐ’์„ -1๋กœ
    let q = [];
    q.push([destination, time]); // ํ˜„์žฌ ๋…ธ๋“œ์™€ ํšŸ์ˆ˜๋ฅผ ํ•จ๊ป˜ ์ €์žฅ
    visited[destination] = 0;

    while(q.length>0){
        let [now, count] = q.shift();
        let nowEdges = roadmap.get(now);
        if(!nowEdges) continue;
        nowEdges.forEach(e=>{
            if(visited[e]<0){
                q.push([e, count+1]);
                visited[e] = count+1;
            }
        })
    }
    answer = sources.map(s => visited[s]);
    return;
}

function solution(n, roads, sources, destination) {
    
    roads.forEach(([a, b])=>{ // ์—ฃ์ง€ ์–‘๋ฐฉํ–ฅ ์ €์žฅ
        if(roadmap.has(a)) roadmap.set(a, [...roadmap.get(a), b]);
        else roadmap.set(a, [b]);
        
        if(roadmap.has(b)) roadmap.set(b, [...roadmap.get(b), a]);
        else roadmap.set(b, [a]);
    })
    bfs(destination, 0, sources, n);
    return answer;
}

 

 

์ง€๊ธˆ ๊ฐ๊ธฐ์•ฝ์„ ๋จน๊ณ  ์žˆ๋Š”๋ฐ.. ํ™•์‹คํžˆ ๋จธ๋ฆฌ๊ฐ€ ์ž˜ ์•ˆ๋Œ์•„๊ฐ„๋‹ค.

์–ผ๋ฅธ ์ปจ๋””์…˜ ํšŒ๋ณตํ•ด์•ผ๊ฒ ๋‹ค ใ… ใ… 

728x90
๋ฐ˜์‘ํ˜•