✏️

uglyNumbers

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