
😎풀이
- 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]
};