문제 개요
양의 정수 n과 반복 횟수 m이 주어졌을 때, n + nn + nnn + … 처럼 항이 진행될수록 n이 한 글자씩 이어 붙여지는 수열의 합을 구하는 것이 이 프로그램의 목표입니다.
예를 들어 n = 3, m = 5라면 3 + 33 + 333 + 3333 + 33333 = 37035를 계산하게 됩니다.
알고리즘
- n과 m을 입력받습니다.
- 숫자 n을 문자열로 변환합니다.
- 합계를 첫 번째 항인 n으로 초기화합니다.
- 문자열을 이어 붙여 nn, nnn, nnnn… 형태의 다음 항을 만듭니다.
- 각 항을 더하기 전에 문자열을 다시 정수로 변환합니다.
- 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 형태로 계산하는 방법도 있지만, 문자열 방식이 직관적이어서 이해하고 구현하기가 훨씬 쉽습니다.