
파이썬에서 1부터 1000까지의 자연수 중 3의 배수의 합을 구하는 방법을 파이썬으로 구현하기
#1. 반복문(for loop)을 이용한 방법
가장 직관적인 방법으로, for 반복문을 사용하여 1부터 1000까지 숫자를 하나씩 확인하며 3의 배수일 경우에만 합계에 더해주는 방식입니다.
total_sum = 0
for number in range(1, 1001):
if number % 3 == 0:
total_sum += number
print(total_sum)
코드 분석
- total_sum = 0
- total_sum이라는 변수를 선언하고 초기값을 0으로 설정합니다. 이 변수는 앞으로 3의 배수들을 누적하여 더할 합계를 저장하는 역할을 합니다.
- for number in range(1, 1001):
- for 반복문을 시작합니다. range(1, 1001)은 1부터 1000까지의 연속적인 정수(1, 2, 3, ..., 1000)를 순서대로 생성합니다.
- 반복문은 이 숫자들을 하나씩 number 변수에 할당하며 1000번 반복됩니다.
- if number % 3 == 0:
- 각 number가 3의 배수인지 확인하는 조건문입니다.
- %는 나머지 연산자입니다. number % 3은 number를 3으로 나눈 나머지 값을 반환합니다.
- == 0은 나머지가 0인지 확인하는 비교 연산자입니다.
- 만약 number가 3으로 나누어떨어지면(예: 3, 6, 9 등), 이 조건은 **참(True)**이 되어 다음 줄의 코드가 실행됩니다. 그렇지 않으면(예: 1, 2, 4 등), 이 조건은 **거짓(False)**이 되어 다음 줄의 코드는 건너뛰게 됩니다.
- total_sum += number
- total_sum = total_sum + number와 같은 의미의 축약 연산자입니다.
- 앞서의 if 조건이 참일 때만 이 코드가 실행됩니다. 현재 number가 3의 배수이므로, 이 숫자를 현재 total_sum에 더하여 다시 total_sum에 할당합니다. 이 과정을 통해 3의 배수들이 total_sum 변수에 계속 누적됩니다.
- print(total_sum)
- for 반복문이 모두 끝난 후(1000까지의 모든 숫자를 확인한 후), 최종적으로 계산된 total_sum 값을 화면에 출력합니다.
이 코드는 단순 반복과 조건문을 사용해 문제를 해결하는 가장 기본적인 접근 방식입니다. 결과적으로 이 코드는 1부터 1000까지 3의 배수인 3, 6, 9, ..., 999를 모두 더한 값인 166833을 출력합니다.
#2. 리스트 컴프리헨션(list comprehension)을 이용한 방법
리스트 컴프리헨션은 파이썬의 강력한 기능으로, 반복문과 조건문을 한 줄로 작성하여 리스트를 만들고, sum() 함수로 합계를 계산합니다.
total_sum = sum([number for number in range(1, 1001) if number % 3 == 0])
print(total_sum)
코드 분석
- [number for number in range(1, 1001) if number % 3 == 0]
- 이 부분이 바로 리스트 컴프리헨션입니다.
- for number in range(1, 1001): 1부터 1000까지의 모든 정수를 하나씩 가져와 number에 할당합니다.
- if number % 3 == 0: 각 number가 3으로 나누어 떨어지는지(즉, 3의 배수인지) 확인하는 조건입니다. 조건이 참인 경우에만 number가 리스트에 포함됩니다.
- [... ]: 위 두 과정을 거쳐 최종적으로 [3, 6, 9, ..., 999]와 같이 1부터 1000 사이의 모든 3의 배수만을 담은 새로운 리스트를 생성합니다.
- sum(...)
- 파이썬의 내장 함수인 sum()은 괄호 안의 모든 요소의 합을 계산합니다.
- 앞서 리스트 컴프리헨션으로 생성된 [3, 6, 9, ..., 999] 리스트를 sum() 함수가 받아서 모든 숫자를 더합니다.
- total_sum = ...
- sum() 함수가 반환한 최종 합계 값을 total_sum이라는 변수에 저장합니다.
- print(total_sum)
- 최종적으로 계산된 합계 값인 total_sum을 화면에 출력합니다. 이 코드의 실행 결과는 166833입니다.
이 코드는 반복문을 여러 줄에 걸쳐 작성하는 대신, 한 줄에 압축적으로 표현하여 간결하고 가독성이 높다는 장점이 있습니다.
#3. 제너레이터(Generator)와 sum() 함수를 이용한 방법
리스트 컴프리헨션과 비슷하지만, 대괄호([]) 대신 소괄호(())를 사용하면 제너레이터 표현식이 됩니다. 제너레이터는 모든 값을 한꺼번에 메모리에 저장하지 않고, 필요할 때마다 값을 하나씩 생성해냅니다.
total_sum = sum(number for number in range(1, 1001) if number % 3 == 0)
print(total_sum)
코드 분석
- sum(...): 파이썬의 내장 함수로, 괄호 안의 모든 요소의 합을 계산합니다.
- (number for number in range(1, 1001) if number % 3 == 0): 이 부분이 제너레이터 표현식입니다. 리스트 컴프리헨션과 문법은 유사하지만, 대괄호([]) 대신 소괄호(())를 사용한다는 차이가 있습니다.
- range(1, 1001)은 1부터 1000까지의 숫자를 순서대로 생성합니다.
- if number % 3 == 0은 각 숫자가 3의 배수인지 확인하는 조건입니다. 이 조건이 참일 때만 해당 숫자가 다음 단계로 전달됩니다.
- 제너레이터는 모든 숫자를 한 번에 메모리에 저장하는 리스트와 달리, 요청이 있을 때마다 값을 하나씩 생성합니다. sum() 함수는 제너레이터로부터 3의 배수들을 하나씩 받아서 더합니다. 이 방식은 메모리 사용량이 매우 적어 대량의 데이터를 처리할 때 효율적입니다.
따라서 이 코드는 range(1, 1001)에서 3의 배수만 걸러내고, sum() 함수가 이 값들을 모두 더해 최종 합계인 166833을 total_sum 변수에 저장한 후 출력합니다.
#4. filter() 함수를 이용한 방법
filter() 함수는 주어진 함수와 반복 가능한 객체를 사용하여 특정 조건에 맞는 요소만 걸러내는 기능을 합니다. 3의 배수를 판별하는 함수를 lambda 표현식으로 간단하게 만들 수 있습니다.
total_sum = sum(filter(lambda x: x % 3 == 0, range(1, 1001)))
print(total_sum)
코드 분석
- range(1, 1001): 1부터 1000까지의 연속된 정수(1, 2, 3, ..., 1000)를 생성합니다.
- lambda x: x % 3 == 0: filter() 함수에 사용되는 **익명 함수(lambda function)**입니다. x라는 매개변수를 받아서 x를 3으로 나눈 나머지가 0인지(즉, 3의 배수인지)를 확인하여 True 또는 False를 반환합니다.
- filter(lambda x: x % 3 == 0, range(1, 1001)): filter() 함수는 첫 번째 인자로 주어진 함수(lambda 함수)를 두 번째 인자인 range() 객체의 모든 요소에 적용하여, True를 반환하는 요소들만 걸러내는 **이터레이터(iterator)**를 반환합니다. 이 이터레이터는 3, 6, 9, ..., 999와 같은 3의 배수들을 포함합니다.
- sum(...): 파이썬의 내장 함수로, filter() 함수가 반환한 이터레이터의 모든 요소들의 합을 계산합니다.
- total_sum = ...: sum() 함수의 결과값을 total_sum 변수에 저장합니다.
- print(total_sum): 최종적으로 계산된 값인 166833을 출력합니다.
이 코드는 반복문을 명시적으로 사용하지 않고, 함수형 프로그래밍의 개념을 적용하여 문제를 해결하는 방식입니다. filter() 함수는 필요한 요소만 효율적으로 걸러내기 때문에, 전체 리스트를 메모리에 생성하는 리스트 컴프리헨션보다 메모리 사용 측면에서 유리할 수 있습니다.

'파이썬(문제풀이)' 카테고리의 다른 글
| 파이썬 버블정렬 (0) | 2025.09.20 |
|---|---|
| 파이썬 리스트 [100, 300, 400, 500, 700]에서 400, 500를 삭제 (0) | 2025.09.19 |
| 파이썬 2제곱, 3제곱, 4제곱 코딩 (0) | 2025.09.17 |
| 파이썬 일렬로 나열된 숫자의 자릿수 합 (0) | 2025.09.16 |
| 파이썬 최대값을 반환 (0) | 2025.09.15 |