
더보기
1부터 50까지의 모든 숫자를 나열했을 때, 각 숫자의 자릿수를 더하는 파이썬 코드
#1: 반복문(for)을 이용한 일반적인 방법
total_sum = 0
for num in range(1, 51):
num_str = str(num)
for digit in num_str:
total_sum += int(digit)
print(f"1부터 50까지 모든 자릿수의 총합: {total_sum}")
# 출력: 330
코드 분석
이 코드는 크게 두 부분으로 나눌 수 있습니다: 초기화와 반복 계산.
1. 변수 초기화
total_sum = 0
- total_sum이라는 변수를 선언하고 0으로 초기화합니다. 이 변수는 1부터 50까지의 모든 숫자의 자릿수를 더한 최종 합계를 저장하는 역할을 합니다.
2. 반복 계산 (For 루프)
for num in range(1, 51):
num_str = str(num)
for digit in num_str:
total_sum += int(digit)
- 바깥쪽 for 루프: for num in range(1, 51)는 1부터 50까지의 정수를 순서대로 num 변수에 할당하며 반복합니다. 즉, num은 1, 2, 3, ..., 50 순으로 변합니다.
- 숫자를 문자열로 변환: num_str = str(num)는 현재 num에 할당된 정수를 문자열로 변환합니다. 예를 들어, num이 12이면 num_str은 "12"가 됩니다.
- 안쪽 for 루프: for digit in num_str는 변환된 문자열 num_str의 각 문자를 순서대로 digit 변수에 할당하며 반복합니다. 예를 들어, num_str이 "12"일 때, 이 루프는 두 번 실행됩니다. 첫 번째에는 digit에 "1"이, 두 번째에는 "2"가 할당됩니다.
- 자릿수 더하기: total_sum += int(digit)는 digit 변수의 문자(예: "1")를 int() 함수를 사용하여 정수(예: 1)로 변환한 후, 이를 total_sum에 더합니다. 이 과정이 모든 숫자의 모든 자릿수에 대해 반복됩니다.
최종적으로 모든 반복이 끝난 후, print(f"1부터 50까지 모든 자릿수의 총합: {total_sum}") 코드가 실행되어 total_sum에 저장된 최종 합계(330)를 출력하게 됩니다. 이 코드는 중첩 반복문을 사용하여 문제를 해결하는 전형적인 예시입니다.
#2: 리스트 컴프리헨션(List Comprehension)을 이용한 간결한 방법
total_sum = sum(int(digit) for num in range(1, 51) for digit in str(num))
print(f"1부터 50까지 모든 자릿수의 총합: {total_sum}")
# 출력: 330
코드 분석
이 코드는 한 줄이지만 내부적으로 여러 단계의 작업을 수행합니다.
- range(1, 51): 먼저, 1부터 50까지의 정수 시퀀스를 생성합니다. num 변수는 이 시퀀스(1, 2, 3, ..., 50)를 순서대로 하나씩 가져옵니다.
- for digit in str(num): 바깥쪽 for 루프에서 가져온 각 숫자(num)를 str() 함수를 사용해 문자열로 변환합니다. 그리고 이 변환된 문자열의 각 문자를 digit 변수에 할당합니다.
- 예를 들어, num이 12일 때, str(12)는 "12"가 됩니다.
- 안쪽 for 루프는 이 "12"를 순회하며 digit에 먼저 "1"을, 그다음 "2"를 할당합니다.
- int(digit): digit 변수에 할당된 각 문자("1", "2", "3", ...)를 int() 함수를 사용해 다시 정수(1, 2, 3, ...)로 변환합니다.
- sum(...): 마지막으로, sum() 함수가 앞서 변환된 모든 정수들을 합산하여 최종 결과를 계산합니다. 이 결과는 total_sum 변수에 할당됩니다.
이 코드는 여러 줄의 for 반복문을 한 줄로 압축하여 표현한 것으로, 코드가 훨씬 간결해진다는 장점이 있습니다. 최종적으로 계산된 값은 330입니다.
#3: 수학적 연산을 이용한 방법
total_sum = 0
for num in range(1, 51):
temp_num = num
while temp_num > 0:
total_sum += temp_num % 10 # 10으로 나눈 나머지는 마지막 자릿수
temp_num //= 10 # 10으로 나눈 몫은 마지막 자릿수를 제거한 나머지
print(f"1부터 50까지 모든 자릿수의 총합: {total_sum}")
# 출력: 330
코드 분석
이 코드는 크게 두 개의 반복문으로 구성되어 있습니다.
1. 변수 초기화 및 바깥쪽 for 루프
total_sum = 0
for num in range(1, 51):
temp_num = num
- total_sum = 0: 모든 자릿수의 총합을 저장할 변수를 0으로 초기화합니다.
- for num in range(1, 51): 1부터 50까지의 모든 숫자에 대해 반복 작업을 수행합니다. num 변수는 1, 2, 3, ..., 50 순으로 할당됩니다.
- temp_num = num: 안쪽 while 루프에서 num의 자릿수를 분해할 때 원본 num을 보존하기 위해, num의 값을 temp_num이라는 임시 변수에 복사합니다.
2. 안쪽 while 루프 (자릿수 분리 및 합산)
while temp_num > 0:
total_sum += temp_num % 10
temp_num //= 10
- while temp_num > 0: temp_num이 0이 될 때까지 이 루프를 계속 실행합니다. temp_num이 0이 되면 모든 자릿수를 처리했다는 의미이므로 루프가 종료됩니다.
- total_sum += temp_num % 10: 현재 temp_num을 10으로 나눈 나머지를 total_sum에 더합니다. 이 나머지가 바로 가장 오른쪽(1의 자리) 자릿수입니다.
- 예를 들어, temp_num이 47일 때, 47 % 10은 7이므로, 7을 total_sum에 더합니다.
- temp_num //= 10: 현재 temp_num을 10으로 나눈 몫을 다시 temp_num에 할당합니다. 이는 가장 오른쪽 자릿수를 제거하는 효과를 줍니다.
- temp_num이 47일 때, 47 // 10은 4(정수 나눗셈)이므로, temp_num은 4로 바뀝니다.
- 다음 while 루프에서 temp_num이 4가 되어 4 % 10 = 4가 total_sum에 더해지고, temp_num은 4 // 10 = 0이 되면서 루프가 종료됩니다.
이 과정이 num이 1부터 50까지 모든 값에 대해 반복되며, 최종적으로 total_sum에는 330이라는 올바른 값이 저장됩니다. 이 방법은 앞서 보여드린 문자열 변환 방식보다 성능이 더 우수한 경우가 많습니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 1에서 1000까지의 자연수중 3의 배수의 합 (0) | 2025.09.19 |
|---|---|
| 파이썬 2제곱, 3제곱, 4제곱 코딩 (0) | 2025.09.17 |
| 파이썬 최대값을 반환 (0) | 2025.09.15 |
| 파이썬 주민등록번호를 분석하여 성별을 판별하는 프로그램 (0) | 2025.09.15 |
| 파이썬 주민등록번호 분리 (0) | 2025.09.14 |