이번 글에서는 Python으로 n + nn + nnn + … (m번 반복) 형태의 수열 합을 계산하는 프로그램을 작성해 보겠습니다. 먼저 프로그램의 입력값과 출력값 예시를 살펴보겠습니다.
입력 및 출력 예시
Input: 3 4 3 + 33 + 333 + 3333 Output: 3702
Input: 5 5 5 + 55 + 555 + 5555 + 55555 Output: 61725
즉, 두 개의 숫자 n과 m이 주어지면, 위와 같은 규칙으로 생성된 수열의 전체 합을 구해야 합니다. 아래 단계를 따라가면 원하는 결과를 얻을 수 있습니다.
알고리즘
1. 숫자 n과 m을 초기화한다.
2. n의 값으로 변수 change를 초기화한다.
3. 합계를 저장할 변수 s를 0으로 초기화한다.
4. m번 반복하는 루프를 작성한다.
4.1. change 값을 s에 더한다.
4.2. change 값을 갱신하여 수열의 다음 숫자를 만든다.
5. 프로그램 마지막에 합계 s를 출력한다.핵심은 수열의 다음 숫자를 만들어내는 일반 공식을 세우는 것입니다. 직접 한 번 고민해 보시기 바랍니다. 로직이 떠오르지 않는다면 아래 코드를 참고하세요.
예제 코드 1
## n과 m 초기화
n, m = 3, 4
## change 변수를 n으로 초기화
change = n
## 합계를 0으로 초기화
s = 0
## 루프 실행
for i in range(m):
## change를 s에 더함
s += change
## change 값을 갱신하여 다음 숫자 생성
change = change * 10 + n
## 합계 출력
print(s)출력 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
3702
앞서 살펴본 두 번째 예시와 같이, 서로 다른 값으로도 확인해 보겠습니다.
예제 코드 2
## n과 m 초기화
n, m = 5, 5
## change 변수를 n으로 초기화
change = n
## 합계를 0으로 초기화
s = 0
## 루프 실행
for i in range(m):
## change를 s에 더함
s += change
## change 값을 갱신하여 다음 숫자 생성
change = change * 10 + n
## 합계 출력
print(s)출력 결과
프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
61725
동작 원리 이해하기
이 코드의 핵심은 change = change * 10 + n이라는 한 줄입니다. 현재 값에 10을 곱하면 자릿수가 하나 늘어나고, 여기에 n을 더하면 끝자리에 n이 붙습니다. 예를 들어 change가 33일 때 33 × 10 + 3 = 333이 되어 수열의 다음 항이 자연스럽게 만들어집니다.
마무리
이 튜토리얼에 대해 궁금한 점이 있다면 댓글로 남겨주세요. 도움이 되었기를 바랍니다!