관리 메뉴

Daehyunii's Dev-blog

솑아지 μ°ΎκΈ°(μƒνƒœνŠΈλ¦¬κ²€μƒ‰ : BFS) λ³Έλ¬Έ

πŸ“š Language & CS knowledge/Algorithm (κΈ°μ΄ˆλ¬Έμ œν’€μ΄)

솑아지 μ°ΎκΈ°(μƒνƒœνŠΈλ¦¬κ²€μƒ‰ : BFS)

Daehyunii 2022. 9. 7. 22:30

문제(좜처 : μΈν”„λŸ° μžλ°”μŠ€ν¬λ¦½νŠΈ μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν’€μ΄ κ°•μ˜, μ •λ³΄μ˜¬λ¦Όν”Όμ•„λ“œ)

ν˜„μˆ˜λŠ” 솑아지λ₯Ό μžƒμ–΄λ²„λ Έλ‹€. λ‹€ν–‰νžˆ μ†‘μ•„μ§€μ—λŠ” μœ„μΉ˜μΆ”μ κΈ°κ°€ 달렀 μžˆλ‹€. ν˜„μˆ˜μ˜ μœ„μΉ˜μ™€ 솑아 μ§€μ˜ μœ„μΉ˜κ°€ μˆ˜μ§μ„ μƒμ˜ μ’Œν‘œ 점으둜 주어지면 ν˜„μˆ˜λŠ” ν˜„μž¬ μœ„μΉ˜μ—μ„œ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ λ‹€μŒ κ³Ό 같은 λ°©λ²•μœΌλ‘œ μ΄λ™ν•œλ‹€. μ†‘μ•„μ§€λŠ” 움직이지 μ•Šκ³  μ œμžλ¦¬μ— μžˆλ‹€.
ν˜„μˆ˜λŠ” 슀카이 콩콩을 타고 κ°€λŠ”λ° ν•œ 번의 μ ν”„λ‘œ μ•žμœΌλ‘œ 1, λ’€λ‘œ 1, μ•žμœΌλ‘œ 5λ₯Ό 이동할 수 μžˆλ‹€. μ΅œμ†Œ λͺ‡ 번의 μ ν”„λ‘œ ν˜„μˆ˜κ°€ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ 갈 수 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„± ν•˜μ„Έμš”.

β–£ μž…λ ₯μ„€λͺ…

 

첫 번째 쀄에 ν˜„μˆ˜μ˜ μœ„μΉ˜ S와 μ†‘μ•„μ§€μ˜ μœ„μΉ˜ Eκ°€ 주어진닀. μ§μ„ μ˜ μ’Œν‘œ 점은 1λΆ€ν„° 10,000 κΉŒμ§€μ΄λ‹€.

 

β–£ 좜λ ₯μ„€λͺ…
μ ν”„μ˜ μ΅œμ†ŒνšŸμˆ˜λ₯Ό κ΅¬ν•œλ‹€. 닡은 1μ΄μƒμž…λ‹ˆλ‹€.

 

β–£ μž…λ ₯예제 1

5 14

 

β–£ 좜λ ₯예제 1

3

 

β–£ μž…λ ₯예제 2

8 3

 

β–£ 좜λ ₯예제 2

5

 

Tip

 

λ¬Έμ œν’€μ΄

//μ •λ‹΅
function solution(s, e){  
    let answer=0;
    let ch=Array.from({length:10001}, ()=>0);
    let dis=Array.from({length:10001}, ()=>0);
    let queue=[];
    queue.push(s);
    ch[s]=1;
    dis[s]=0;
    while(queue.length){
        let x=queue.shift();
        for(let nx of [x-1, x+1, x+5]){
            if(nx===e) return dis[x]+1;
            if(nx>0 && nx<=10000 && ch[nx]===0){
                ch[nx]=1;
                queue.push(nx);
                dis[nx]=dis[x]+1;
            }
        }
    }
    return answer; 
}

console.log(solution(8, 3));