Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

n + nn + nnn + …(m번 반복) 수열의 합을 계산하는 파이썬 프로그램

문제 개요

양의 정수 n과 반복 횟수 m이 주어졌을 때, n + nn + nnn + … 처럼 항이 진행될수록 n이 한 글자씩 이어 붙여지는 수열의 합을 구하는 것이 이 프로그램의 목표입니다.
예를 들어 n = 3, m = 5라면 3 + 33 + 333 + 3333 + 33333 = 37035를 계산하게 됩니다.

알고리즘

  1. n과 m을 입력받습니다.
  2. 숫자 n을 문자열로 변환합니다.
  3. 합계를 첫 번째 항인 n으로 초기화합니다.
  4. 문자열을 이어 붙여 nn, nnn, nnnn… 형태의 다음 항을 만듭니다.
  5. 각 항을 더하기 전에 문자열을 다시 정수로 변환합니다.
  6. m개의 항을 모두 더한 후 최종 합계를 반환합니다.

예제 코드

# 수열의 합을 구하는 파이썬 프로그램
def sum_of_series(n, m):
    str_n = str(n)         # ① 숫자를 문자열로 변환
    total = n              # ② 합계를 첫 번째 항으로 초기화
    term = str(n)          # ③ 현재 항을 문자열로 저장

    for i in range(1, m):  # ④ 두 번째 항부터 m번째 항까지 반복
        term += str_n      # ⑤ 문자열 이어 붙이기 → nn, nnn, ...
        total += int(term) # ⑥ 정수로 변환해 합산
    return total           # ⑦ 최종 합계 반환

# 실행 코드
n = int(input('n 값을 입력하세요: '))
m = int(input('반복 횟수 m을 입력하세요: '))
result = sum_of_series(n, m)
print('수열의 합 ::>', result)

실행 결과

n 값을 입력하세요: 3
반복 횟수 m을 입력하세요: 5
수열의 합 ::> 37035

코드 설명

이 코드의 핵심은 문자열 연결(string concatenation)입니다. 숫자를 그대로 더하면 자릿수가 늘어나는 패턴을 만들기 어렵지만, 문자열로 바꾸면 '3'에 '3'을 붙여 '33', 다시 '3'을 붙여 '333'처럼 손쉽게 다음 항을 생성할 수 있습니다. 매 반복마다 완성된 문자열 항을 int()로 변환해 누적 합산하면 원하는 결과를 얻을 수 있습니다.

시간 복잡도는 항의 개수에 비례하므로 O(m × d)입니다(여기서 d는 마지막 항의 자릿수). 참고로 등비수열 공식을 활용해 Σ n × (10k − 1) / 9 형태로 계산하는 방법도 있지만, 문자열 방식이 직관적이어서 이해하고 구현하기가 훨씬 쉽습니다.