품생품사(品生品死)

소프트웨어 품질에 살고 품질에 죽는 그런 평범한 일상 블로그

TESTING/PROGREMING

[자바스크립트 코딩 - Chap.1] 실습 팩토리얼 프로그래밍 문제 풀어보기

품생품사(品生品死) 2020. 12. 4. 00:30
반응형

자바스크립트 예제 : 팩토리얼 프로그래밍

파이썬 하다가 왠 자바스크립트?

파이썬을 2~3개월 공부했습니다.

그래서 다음 언어로 선택한 것은 자바 스크립트입니다.

다방면 사용이 가능하고, 역시 스크립트 언어는 어렵지 않은 것 같습니다.

다른점은 웹에서 실행 결과를 본다? 정도인 것 같아요.

 

기본 지식이 좀 있어야 문제를 풀수 있습니다. 참고하세요.

 

문제

개념 설명

중학교 때 배운 '계승(팩토리얼)' 기억하시나요?

1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.

출저: 네이버 지식백과

팩토리얼은 아래와 같이 계산합니다. 0!은 1이라는 점도 기억해주세요.

 

출력 예시

0! = 1
1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
4! = 1 * 2 * 3 * 4 = 24
5! = 1 * 2 * 3 * 4 * 5 = 120
6! = 1 * 2 * 3 * 4 * 5 * 6 = 720

그러면, 파라미터로 양의 정수 n을 받고 n!을 계산해서 리턴해주는 함수 factorial을 작성해주세요.

코드를 잘 작성하셨다면 다음과 같은 결과가 출력되어야 합니다.

479001600
720
6
1

 

힌트

1. 일단 0! 도 1이기 때문에 템플릿에서도 변수 factorialValue의 초깃값을 1로 할당해 주었습니다.

 

그래서 0인 경우에는 그대로 factorialValue를 리턴하면 되고,

파라미터 num에 1이상의 숫자가 전달되었을 때 필요한 동작들을 작성해주면 되겠죠?

반복문을 활용하면 이 문제를 충분히 해결할 수 있을 것 같습니다! :)

 

2. 제시된 문제에서는 팩토리얼 계산식을 자세히 살펴보면, n 값이 1이 될 때까지 n부터 1씩 줄어든 값이 그다음에 곱해지는 걸 확인할 수 있죠?

0! = 1
1! = 1
2! = 1 * 2 = 2
3! = 1 * 2 * 3 = 6
4! = 1 * 2 * 3 * 4 = 24
5! = 1 * 2 * 3 * 4 * 5 = 120
6! = 1 * 2 * 3 * 4 * 5 * 6 = 720

반복문을 작성해 본다면 다음과 같이 작성해 볼 수 있을 것 같습니다.

for (let i = 1; i <= n; i++) {
    // 동작부분
}

 

모범 답안

function factorial(n) {
  let result = 1;

  for (let i = n; i >= 1; i--) {
    result = result * i;
  }

  return result;
}

// 테스트 코드
console.log(factorial(12));
console.log(factorial(6));
console.log(factorial(3));
console.log(factorial(0));

 

해설

STEP 1: 0!

우선 결괏값이 0!의 값인 1로 초기화되어 있습니다.

let result = 1;

STEP 2: n! (1 이상에 대해)

n이 1 이상인 경우에는 반복문을 사용해서 팩토리얼 계산을 해줍니다.

처음부터 생각해보면, n이 1 이상이니깐 조건문을 통해서 다음과 같이 작성해 줄 수 있을겁니다.

function factorial(n) {
  let result = 1;

  if (n > 0) {
    for (let i = 1; i <= n; i++) {
      result = result * i;
    }
  }

  return result;
}

하지만 조금만 더 생각해보면, 사실 굳이 if문이 없어도 for문의 조건 부분에 의해서 동일하게 동작한다는 걸 알 수 있습니다.

function factorial(n) {
  let result = 1;

    for (let i = 1; i <= n; i++) {
    result = result * i;
  }

  return result;
}

// 테스트 코드
console.log(factorial(12));
console.log(factorial(6));
console.log(factorial(3));
console.log(factorial(0));
479001600
720
6
1

STEP 2-1: n! (반대로도 생각해보기)

팩토리얼의 정의를 다시 한번 살펴보면,

 

1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.

인데, 곱셈이기 때문에 교환법칙에 의해서 어떤 양의 정수 n부터 1까지의 정수를 모두 곱한 것을 말하며

n!로 나타낸다라고 표현해도 결과는 같습니다.

 

그래서 0!부터 6!을 구하는 공식을 다시 작성하면 아래와 같이 작성할 수 있습니다.

0! = 1
1! = 1
2! = 2 * 1 = 2
3! = 3 * 2 * 1 = 6
4! = 4 * 3 * 2 * 1 = 24
5! = 5 * 4 * 3 * 2 * 1 = 120
6! = 6 * 5 * 4 * 3 * 2 * 1 = 720

그럼, 반복문을 작성할 때도 이런 방향으로 작성해볼 수 있겠죠?

function factorial(n) {
  let result = 1;

  for (let i = n; i >= 1; i--) {
    result = result * i;
  }

  return result;
}

// 테스트 코드
console.log(factorial(12));
console.log(factorial(6));
console.log(factorial(3));
console.log(factorial(0));
479001600
720
6
1

i를 n부터 시작해서 1이 될 때까지 i를 하나씩 줄여나가는 방법으로도 우리가 원하는 결과를 얻어낼 수 있습니다.

 

 

Related References

 

코딩이 처음이라면, 코드잇

월 3만원대로 Python, JavaScript, HTML/CSS, Java 등 1,600개 이상 프로그래밍 강의를 무제한 수강하세요

www.codeit.kr:443

This is coding_000
JAVA 프로그래밍

요약 : sparta coding club, 스파르타 코딩, 코드잇, 노마드 코더, 프로그래밍, 직장인 코딩, 내일 배움 카드 코딩, 밀크티 코딩, 초등 코딩, 아이스크림 코딩, 코딩 소프트웨어, 자바 스크립트 국비 지원, 자바 스크립트 교육

728x90
반응형