문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/120848
답안1 ( 헬퍼 함수 )
function solution(n) {
function factorial(num) {
if (num <= 1) return 1
return num * factorial(num - 1)
}
for(let i = 10; i >= 0; i--) {
if (n >= factorial(i)) {
return i
}
}
}
- 팩토리얼을 사용해야하는 문제이니 풀이 내부에 팩토리얼을 구하는 함수를 하나 작성한다.
- 10이 최대치인 것을 이용한다.
- for문이 10부터 0까지 순회할때마다 factorial값을 구하고 n과 비교한다.
- 팩토리얼값보다 n이 크거나 같은 순간 return한다.
답안2( while )
function solution(n) {
let i = 1
let factorial = 1
while (factorial <= n) {
i += 1
factorial *= i
}
return i - 1
}
- 팩토리얼을 5 x 4 x 3 x 2 x 1과 같은 역순이 아닌 1 x 2 x 3 x 4 x 5 와 같은 정방향으로 계산하는 방식이다.
- 별도로 factorial 함수를 만들지 않아도되어 편리한 방법이다.
- while문에서는 factorial값이 n보다 커지는지 계속 감시하며
- factorial값이 n보다 크거나 같아지는 순간 반복문이 깨지고 return된다.
- 다만 while의 특성상 i가 1이 더 증가하기 때문에 return에서는 i를 1 빼준다.
'코테 문제 풀이' 카테고리의 다른 글
[백준 1000] A + B (Node.js) (0) | 2023.01.13 |
---|---|
[레벨 0] k의 개수 (이중 for문, split, Array 메서드체이닝) (0) | 2023.01.11 |
[레벨 0] A로 B 만들기 (배열 정렬 후 join으로 문자열화) (0) | 2023.01.10 |
[레벨 0] 중복된 문자 제거 (object, Set) (0) | 2023.01.10 |
[레벨 0] 중복된 문자 제거 (for문, Set) (0) | 2022.12.18 |