๐Ÿ”’Algorithm

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ํ’€์ด(js) > ์ˆซ์ž ๋ณ€ํ™˜ํ•˜๊ธฐ (lv2)

devWarrior 2023. 6. 11. 18:10

 

๋ฌธ์ œ๐Ÿ”ฝ

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

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

๋‹ค๋ฅธ์‚ฌ๋žŒ ํ’€์ด ๐Ÿ”ฝ

function solution(x, y, n) {
  if (x === y) return 0;
  const dp = {};
  dp[x] = 0;
  let data = [x];
  while (data.length) {
    const newData = [];
    for (const d of data) {
      for (const e of [d + n, d * 2, d * 3]) {
        if (e > y || dp[e]) continue;
        if (e === y) return dp[d] + 1;
        dp[e] = dp[d] + 1;
        newData.push(e);
      }
    }
    data = newData;
  }
  return -1;
}

๋‚ดํ’€์ด๐Ÿ”ฝ

1. ์ฒซ์‹œ๋„ ์‹คํŒจ โŒ -> ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ(์‹œ๊ฐ„ ์ดˆ๊ณผ)

function solution(x, y, n) {
    var answer = 0;
    const countList = []
    const dfs = (x,count)=>{        
        if(x==y){
            countList.push(count)
            return 
        }if(x>y){
            return 
        }
        dfs(x+n,count+1)
        dfs(x*2,count+1)
        dfs(x*3,count+1)
    }
        dfs(x,0)

    if(countList.length){
        answer=Math.min(...countList)    
    }else{
        answer = -1;
    }
    return answer;
}

๐Ÿ”ฝ ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ๊ฐ€ ๋œธ 

2. ๋‘๋ฒˆ์งธ ์‹œ๋„ > ๐Ÿ’ฏ ์„ฑ๊ณต

function solution(x, y, n) {

    if(x===y){
        return 0;
    }else if(x>y){
        return -1;
    }
    
    let countArray = Array(y+1).fill(Infinity)
    countArray[x] = 0;
    
    for(i=x+1; i<y+1; ++i){
        if(i-n>=x){
            countArray[i] = Math.min(countArray[i],countArray[i-n]+1)
        }
        if(i%2===0&&i/2>=x){
            countArray[i] = Math.min(countArray[i],countArray[i/2]+1)         
        }
        if(i%3===0&&i/3>=x){
            countArray[i] = Math.min(countArray[i],countArray[i/3]+1)         
        }
    }
    return countArray[y]===Infinity? -1:countArray[y]
}

 

๋А๋‚€์ ๐Ÿ˜ฎ 

์ฒ˜์Œ์œผ๋กœ DFS ( Depth first search ) ๋ผ๋Š” ๊ฐœ๋…์„ ์ ‘ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค. DFS/BFS ์ด๋Ÿฐ ์šฉ์–ด๋“ค์ด ์žˆ๋Š”๋ฐ ์šฉ์–ด๋Š” ๋ชฐ๋ผ๋„ ๋˜๊ณ  ๊ทธ ๊ฐœ๋…์„ ์ฒด๋“ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. 2๋ฒˆ์งธ code ์ž‘์„ฑ ์‹œ > ๋‹ค๋ฅธ์‚ฌ๋žŒ์˜ code๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ ํ•˜์˜€๋Š”๋ฐ ํ•ด๋‹น๊ณผ ๊ฐ™์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‘ผ ์ ์ด ์—†์–ด์„œ ์˜จ์ „ํžˆ ์ดํ•ดํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.