CodeWars 05: Factorial

김기욱·2021년 4월 27일
0

코딩테스트

목록 보기
41/68

문제설명

Your task is to write function factorial
팩토리얼을 만드시오

제한사항

None

입출력 예시

None

풀이

from functools import reduce 

def factorial(n):
    return reduce(lambda x, y : x * y , [v for v in range(1, n+1)]) if n > 0 else 1

Factorial이란 뭘까요?
주어진 '양의 정수'보다 크거나 작은 모든 숫자들의 곱입니다.
합이라면 SUM을 쓰면 간단히 해결할텐데, 곱이라니 고민이 듭니다. 하지만 '누적'이라는 키워드를 생각한다면
reduce가 생각나실겁니다. reduce는 map이나 filter함수처럼 주어진 리스트나 문자열 등에 대해서 순차적으로 어떤 '조건'을 적용시켜주는 함수입니다. 다만 map은 각각에 적용을 해주고, filter는 주어진 조건에 맞는 애들만 골라뽑는다면 reduce는 적용 후 누적시켜준다는 개념입니다.

그러므로

  • 삼항연산자를 사용해 0보다 클때만 reduce식을 쓰게 조건을 세워주고(factorial(0)은 1이므로)
  • 리스트 컴프리헨션으로 range에 맞춰 숫자를 뽑아냅니다.
  • 이후 뽑아낸 숫자들을 reduce와 lambda식을 통해 순차적으로 곱을 해줍니다.

다른풀이

def factorial(n):
    j = 1
    for i in range(1, n+1):
       j *= i
    return j 

모듈없이도 for loop을 사용해 충분히 해결가능합니다.

from math import factorial

놀랍게도 파이썬에선 팩토리얼도 math모듈안에 들어있습니다.(저도 처음 알았네요)
심지어 주어진 함수명도 factorial이니 구구절절하게 함수를 구현할 필요도 없고, import만 하면 됩니다.
너무 쉽죠? 🤗

profile
어려운 것은 없다, 다만 아직 익숙치않을뿐이다.

0개의 댓글