Dev_from the Bottom

#10. Algorithm06_python) 수열 1!+2!+3!+4!+5!+...+10!의 합계 본문

Algorithm_study

#10. Algorithm06_python) 수열 1!+2!+3!+4!+5!+...+10!의 합계

고무라면 2022. 5. 11. 21:52

문제)

1! + 2! + 3! + 4! + 5! + ... + 10! 의 순서로 나열되는 수열의 10번째 항까지의 합계

 

step1) 테스트 : 팩토리얼 구하기 ex) 3!, 4!

# 3! = 6

a = 1
for i in range(1,3+1):
    a *= i
print(a)

>>>
6

# -------------------------

# 4! = 24

a = 1
for i in range(1,4+1):
    a *= i
print(a)

>>>
24

 

step2) 팩토리얼 수열의 합계 구하기 ex) 4! 까지

# 1!+2!+3!+4! = 1+2+6+24 = 33

answer = 0

for i in range(1, 4+1):
    # 각 요소의 팩토리얼
    factorial = 1
    for j in range(1, i+1):
        factorial *= j
    print(f'{j}! : {factorial}')
    # 팩토리얼 값 누적
    answer += factorial

print()
print('합계 :', answer)

>>>
1! : 1
2! : 2
3! : 6
4! : 24

합계 : 33

step3) 정답 출력

# 1!+2!+3!+4!+5!+...+10! = 4037913

answer = 0
for i in range(1, 10+1):
    # 각 요소의 팩토리얼
    factorial = 1
    for j in range(1, i+1):
        factorial *= j
    # 팩토리얼 값 누적
    answer += factorial

print(f'정답 : {answer}')

>>>
정답 : 4037913

step4) 메서드화

def algo06():
    answer = 0
    for i in range(1, 10+1):
        # 각 요소의 팩토리얼
        factorial = 1
        for j in range(1, i+1):
            factorial *= j
        # 팩토리얼 값 누적
        answer += factorial
    return answer

print(f'정답 : {algo06()}')

>>>
정답 : 4037913

step5) 메서드 확장 : n값 입력받아서, n! 까지 합계

def algo06_extend(n):
    answer = 0
    for i in range(1, n+1):   # n으로 수정
        # 각 요소의 팩토리얼
        factorial = 1
        for j in range(1, i+1):
            factorial *= j
        # 팩토리얼 값 누적
        answer += factorial
    return answer

n = int(input("숫자 n 입력 : "))
print(f'1!+2!+3!+...+{n}!의 값 : {algo06_extend(n)}')

>>>
숫자 n 입력 : 10
1!+2!+3!+...+10!의 값 : 4037913

 

# 소회

  • 앞으로는 변수명 만들 때, 신경 써야 할 듯     
    • ex) 변수 factorial
  • 팩토리얼을 더 효율적으로 구현하는 로직이 많은 테니, 추후 테스트 및 고민     
    • ex) 재귀 호출

 

Comments