코딩 테스트 풀이 🛠

[프로그래머스] 팩토리얼

엄성준 2023. 2. 9. 01:22

문제 설명

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

 

제한사항

  • 0 < n ≤ 3,628,800

 

입출력 예

 

n result
3628800 10
7 3

 

입출력 예 설명

 

입출력 예 #1

  • 10! = 3,628,800입니다. n이 3628800이므로 최대 팩토리얼인 10을 return 합니다.

입출력 예 #2

  • 3! = 6, 4! = 24입니다. n이 7이므로, 7 이하의 최대 팩토리얼인 3을 return 합니다.

 

나의 풀이

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function solution(n) {
 
    const facArr = []
    
    function fac(num){     
        let answer = num
        let result = num
        while(answer !=1){
            result *= --num
            answer--
        }
        
        return result
    }
    
    for(let i=1; i<=10; i++){
        facArr.push(fac(i))
    }
   
    for(let i=0; i<facArr.length; i++){
        if(n === facArr[i]){
            return i+1
        }else if(facArr[i]<&& n<facArr[i+1]){
            return i+1
        } 
    }
 
}
cs

 

문제를 풀며 느낀 점

 

- 먼저 for문을 통해서 1부터 10까지 수를 fac함수에 매개변수로 주었습니다. 그 후 fac함수에서는 answer의 시작은 num값부터였고 result의 시작도 num부터였습니다. answer의 값이 1과 같지 않을 때 동안 반복하였고 result에는 만약 num값이 3이었다면 3 *2한 값을 result에 할당하였고 그와 동시에 answer--를 통해 처음 할당받은 num에서 1씩 감소시켰습니다.

이러한 과정을 거친 값들을 return 하였고 facArr 배열에는 1부터 10까지 팩토리얼을 거친 결괏값들이 0번째부터 9번째까지 push 되었고 n이 facArr의 배열 안에 요소값 중에 일치한다면 i + 1의 값을 return 하였고 일치하지 않는다면 그 값보다 작은 근삿값을 return 해주었습니다.