[프로그래머스 코딩테스트 입문] 팩토리얼 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 21일
0

코딩테스트연습

목록 보기
42/106
post-thumbnail

1. 문제 설명

2. 제한사항

3. 입출력 예

4. 입출력 예 설명

5. 첫번째 문제 풀이(2023-12-21)

팩토리얼은 쉽게 말해서 n이 주어지면 1부터 n까지의 연속된 모든 양의 정수들을 곱한 값을 만들어내는 공식이라고 보면 되는데요.

자바스크립트에서 팩토리얼을 구현하는 방법은 다음과 같이 재귀 함수로 표현이 가능합니다.


// 처음 n에 10이 들어왔다 쳤을 때 n의 값이 0인지 1인지를 검사합니다. 이 구간은 최종적으로 1을 반환하면서 1부터 시작해서 다시 재귀함수를 n까지 곱하는 효과를 내는 구간인데요. 만약 n이 0이나 1(n이 0일수 있기 때문에 조건에 0을 추가)이 들어있는게 아닌 이상 n부터 1까지 줄어들면서 함수를 호출하고, 마지막 함수에서 1을 반환하면서 본격적으로 n * 1 -> n * 2 * 1 -> n * 3 * 2 * 1과 같이 곱해지는 것을 노린 함수라고 할 수 있겠습니다.
function factorial(n) { 
    if (n === 0 || n === 1) { // 
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

어쨌든 저는 이 문제를 while문을 사용해 반복을 하면서(물론 제한 사항에 n이 1부터 10까지 곱한 값의 범위라 for문으로 10까지 돌리기만 하면 되는데 연습 겸 while문을 사용했습니다.)

function solution(n) {
let factor = 1; // factor는 누적곱을 저장할 변수
let result = 0; // 정답 변수
let i = 1; // 1부터 점진적으로 증가할 변수

while(true){
    factor *= i // 팩터와 i를 곱한 후 factor에 누적하는데
    if(factor > n) break; // 만약 누적된 팩터가 n보다 큰 경우는 break를 걸어서 while문을 끝냅니다. 만약 if문에 걸리지 않으면 factor는 n보다 작거나 같은 경우겠죠.
    result = i // if문에 걸리지 않았다면 i의 값을 result에 할당한 후
    i++; // i 증가
}
return result;

}

profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글