😎풀이

  1. 1은 항상 포함되는 uglyNumber 이다.
  2. 지수를 선언한다. (추 후 primes[i]에 몇을 곱할지 기록하는 용도)
  3. primes를 복사하여 values를 선언한다. (다음 uglyNumbers의 후보들을 기록)
  4. n만큼 순회한다.
    4-1. 현재 uglyNumbers의 후보 중 최솟값을 선택한다.
    4-2. 선택된 수를 uglyNumbers에 추가하고 그에 따라 다음 후보를 입력한다.
  5. n번째의 ugly number를 반환한다.
function nthSuperUglyNumber(n: number, primes: number[]): number {
    const uglyNumbers = [1]
    const indicies = Array(primes.length).fill(0)
    const values = [...primes]
    for(let i = 1; i < n; i++) {
        const curUgly = Math.min(...values)
        uglyNumbers.push(curUgly)
        for(let j = 0; j < primes.length; j++) {
            if(values[j] !== curUgly) continue
            indicies[j]++
            values[j] = uglyNumbers[indicies[j]] * primes[j]
        }
    }

    return uglyNumbers[n - 1]
};
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글