
😎풀이
- 1은 항상 포함되는 uglyNumber 이다.
- 지수를 선언한다. (추 후
primes[i]
에 몇을 곱할지 기록하는 용도)
primes
를 복사하여 values
를 선언한다. (다음 uglyNumbers
의 후보들을 기록)
n
만큼 순회한다.
4-1. 현재 uglyNumbers
의 후보 중 최솟값을 선택한다.
4-2. 선택된 수를 uglyNumbers
에 추가하고 그에 따라 다음 후보를 입력한다.
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]
};