ν‹°μŠ€ν† λ¦¬ λ·°

문제

ν˜„μˆ˜λŠ” 솑아지λ₯Ό μžƒμ–΄λ²„λ Έλ‹€. λ‹€ν–‰νžˆ μ†‘μ•„μ§€μ—λŠ” μœ„μΉ˜μΆ”μ κΈ°κ°€ 달렀 μžˆλ‹€.

 

ν˜„μˆ˜μ˜ μœ„μΉ˜μ™€ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κ°€ μˆ˜μ§μ„ μƒμ˜ μ’Œν‘œ μ μœΌλ‘œμ£Όμ–΄μ§€λ©΄ ν˜„μˆ˜λŠ” ν˜„μž¬ μœ„μΉ˜μ—μ„œ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ λ‹€μŒκ³Ό 같은 λ°©λ²•μœΌλ‘œ μ΄λ™ν•œλ‹€.

 

μ†‘μ•„μ§€λŠ” 움직이지 μ•Šκ³  μ œμžλ¦¬μ— μžˆλ‹€. ν˜„μˆ˜λŠ” 슀카이 콩콩을 타고 κ°€λŠ”λ° ν•œ 번의 μ ν”„λ‘œ μ•žμœΌλ‘œ 1, λ’€λ‘œ 1, μ•žμœΌλ‘œ 5λ₯Ό 이동할 수 μžˆλ‹€. μ΅œμ†Œ λͺ‡λ²ˆμ˜ μ ν”„λ‘œ ν˜„μˆ˜κ°€ μ†‘μ•„μ§€μ˜ μœ„μΉ˜κΉŒμ§€ 갈 수 μžˆλŠ”μ§€ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ„Έμš”.

 

λ¬Έμ œν’€μ΄

이진 트리 λ„ˆλΉ„ 탐색

 

μ΄λ•Œ μ€‘μš”ν•œ 점은 ν•œλ²ˆ λ°©λ¬Έν–ˆλ˜ 지점은 더 이상 μ°Έμ‘° 및 μˆœνšŒν•˜μ§€ μ•ŠμŒμœΌλ‘œμ¨ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ€„μ΄λŠ” 것이닀.

μ΅œλ‹¨ 경둜λ₯Ό κ΅¬ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 같이 각 지점에 λŒ€ν•œ 거리λ₯Ό 거리의 정보λ₯Ό μ €μž₯ν•˜κ³  μžˆλŠ” 배열에 μ €μž₯ν•˜μ˜€λ‹€.

 

거리 정보λ₯Ό μ €μž₯

 

μ½”λ“œ

function solution(s, e) {
  let answer = 0;
  let queue = [];
  let ch = Array.from({length: 10001}, () => 0);
  let dis = Array.from({length: 10001}, () => 0);
  queue.push(s);
  ch[s] = 1; //μ§€μ μ˜ 쀑볡을 방지
  dis[s] = 0; //좜발 μ§€μ μ˜ 거리λ₯Ό 0으둜 μ΄ˆκΈ°ν™”
  while(queue.length) {
    let v = queue.shift();
    for(let nv of [v + 1, v - 1, v + 5]) {
      if(nv === e) return dis[v] +  1;
      if(nv > 0 && nv <= 10000 && ch[nv] === 0) { //μ’Œν‘œ 점의 λ²”μœ„λ₯Ό λ²—μ–΄λ‚˜μ§€ μ•ŠμœΌλ©΄μ„œ ν•œ λ²ˆλ„ 가지 μ•Šμ•˜μ–΄μ•Ό 함
          ch[nv] = 1;
          queue.push(nv);
          dis[nv] = dis[v] + 1; //λ‹€μŒ μ§€μ μ˜ κ±°λ¦¬λŠ” ν˜„μž¬ μ§€μ μ—μ„œμ˜ 거리에 1을 κ°€μ‚°
      }
    }
  }
}

console.log(solution(5, 14));

function solution(s, e) {
  let answer = 0;
  let queue = [];
  let ch = Array.from({length: 10001}, () => 0);
  queue.push(s);
  ch[s] = 1;
  let L = 0; //트리의 λ ˆλ²¨μ„ 이용
  while(queue.length) {
    let len = queue.length;
    for(let i = 0; i < len; i++) { //레벨 내에 ν•΄λ‹Ήν•˜λŠ” λͺ¨λ“  지점을 λͺ¨λ‘ λŒκ³ λ‚˜μ„œμ•Ό λ‹€μŒ 레벨둜 이동할 수 μžˆλ„λ‘ 쀑첩 반볡문 μ‚¬μš©
      let x = queue.shift();
      for(let nx of [x + 1, x - 1, x + 5]){
        if(nx === e) return L + 1;
        if(nx > 0 && nx <= 10000 && ch[nx] === 0) {
          ch[nx] = 1;
          queue.push(nx);
        }
      }
    }
    L++; //λ ˆλ²¨μ„ λͺ¨λ‘ μˆœνšŒν•œ λ’€ λ‹€μŒ 레벨둜 κ°€κΈ° 전에 레벨 κ°’ κ°€μ‚°
  }
}

console.log(solution(5, 14));
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2025/02   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
κΈ€ 보관함