Question
아래와 같이 정의된 ugly numbers 중 n번째 수를 리턴해야 합니다.
•
ugly number는 2, 3, 5로만 나누어 떨어지는 수이다.
•
1은 1번째 ugly number 이다.
•
1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 14, 15, 16, ...
입력
인자 1 : n
•
number 타입의 자연수 (n >= 1)
출력
•
number 타입을 리턴해야 합니다.
주의사항
•
ugly numbers를 배열에 저장했을 때, n번째 ugly number의 위치는 인덱스 n-1 입니다.
Test Case 1
let result = uglyNumbers(1);
console.log(result); // --> 1
Shell
복사
Test Case 2
result = uglyNumbers(3);
console.log(result); // --> 3
Shell
복사
Solve
나눗셈 연산을 매번 다시 할 필요가 없음.
ugly number에 2, 3 또는 5를 곱한 수 역시 ugly number
const uglyNumbers = function (n) {
// TODO: 여기에 코드를 작성합니다.
const result = [1];
let p2 = 0, p3 = 0, p5 = 0;
while (result.length < n) {
let num2 = result[p2] * 2, num3 = result[p3] * 3, num5 = result[p5] * 5;
let minNum = Math.min(num2, num3, num5);
if (minNum === num2) p2++;
if (minNum === num3) p3++;
if (minNum === num5) p5++;
result.push(minNum);
}
return result[n - 1]
};
JavaScript
복사
실행시간 : ms