본문 바로가기
TIL

js 코딩테스트 팩토리얼 문제

by 은지:) 2022. 12. 23.
728x90
반응형

 

 

문제

 

i팩토리얼 (i!)은 1부터 i까지 정수의 곱을 의미합니다.
예를 들어 5! = 5 * 4 * 3 * 2 * 1 = 120 입니다.
정수 n이 주어질 때 다음 조건을 만족하는 가장 큰 정수 i를 return 하도록 solution 함수를 완성해주세요.


제한사항
0 < n ≤ 3,628,800

 

 

 

 

내 답

 

function solution(num) {
    if(num === 1){
        return 1
    }
    if(num ===2){
        return 2
    }
    let div = 1
    const Arr = []
    for(let i=1; i<num; i++){
        div = div*i
        if(div<=num){
            Arr.push(i)
        }
        if(div>num){
            break
        }
    }
    return Arr[Arr.length-1]
}

 

 

let 변수 1 만들어주고

num까지 반복문 돌려 곱한 다음 각각 몫을 Arr 넣어주어 가장 마지막에 담기는 값을 return 해주는 방식으로 풀었다

 

하지만 이는 좋은 방법은 아닌 거 같았고

다른 분이 false 일때까지 도는 while문으로 푸신 걸 보고 이를 똑같이 적용해보았다

 

 

function solution(num) {
    let answer = 1
    let i = 0
    while(answer <= num){
        i++
        answer = answer*i
    }
    return i-1
}

 

num 이 10일 때

 

- 첫번째 턴

1 <= 10

i =1

answer = 1*1 =1

 

- 두번째 턴

1<= 10 (true)

i=2

answer = 1*2 =2

 

- 세번째 턴

2<=10 (true)

i=3

answer = 2*3 =6

 

- 네번째 턴

6<=10(true)

i=4

answer = 6*4 = 24

 

- 다섯번째 턴

24>=10(false)

 

-> while 문 끝!

 

조건식을 먼저 보고 i++ 해주므로

그 전의 턴이 정답에 해당한다

 

return i-1

 

 

 

728x90
반응형

댓글