- Published on
파이썬으로 1부터 100까지 합 구하기 반복문 없이 sum과 range로 끝내기
- Authors
- Name
- 스타차일드
- https://x.com/ETFBITX
서론
처음 파이썬을 배울 때 1부터 100까지 더하기는 거의 필수 예제처럼 등장합니다. 보통은 for 반복문으로 누적합을 만들지만, 실무에서 반복문은 종종 가독성을 떨어뜨리거나 불필요한 코드를 늘립니다. 파이썬은 이미 이런 패턴을 아주 잘 처리하도록 내장 함수가 준비되어 있고, 그 대표가 sum()과 range()입니다.
이 글에서는 반복문 없이 1~100 합을 구하는 가장 파이썬다운 방법을 소개하고, range()의 경계 규칙(포함/제외), 흔한 함정, 성능 관점의 팁까지 실전적으로 정리합니다.
정답은 sum(range(...))
가장 간단하고 표준적인 해법은 아래 한 줄입니다.
result = sum(range(1, 101))
print(result) # 5050
핵심은 두 가지입니다.
range(1, 101)은 1부터 100까지의 정수를 만든다(정확히는 “지연 생성되는 시퀀스”).sum(...)은 시퀀스의 모든 값을 더한다.
왜 101인가 range의 끝값은 포함되지 않는다
range(start, stop)에서 stop은 포함되지 않습니다(exclusive). 그래서 1부터 100까지를 만들려면 stop을 101로 줘야 합니다.
print(list(range(1, 5))) # [1, 2, 3, 4]
이 규칙을 모르면 sum(range(1, 100))처럼 작성해버려서 1부터 99까지만 더하는 실수가 자주 나옵니다.
반복문 없이도 여러 변형을 쉽게 만들 수 있다
sum(range(...)) 패턴을 이해하면, 반복문 없이 다양한 합 계산을 자연스럽게 확장할 수 있습니다.
1부터 N까지의 합
def sum_1_to_n(n: int) -> int:
return sum(range(1, n + 1))
print(sum_1_to_n(100)) # 5050
짝수만 더하기
range()는 세 번째 인자로 step을 받을 수 있습니다.
result = sum(range(2, 101, 2))
print(result) # 2550
range(2, 101, 2)→ 2, 4, 6, ..., 100
특정 조건만 더하기 (필터링)
반복문을 직접 쓰지 않더라도, 제너레이터 표현식으로 조건을 걸 수 있습니다.
# 1~100 중 3의 배수 합
result = sum(x for x in range(1, 101) if x % 3 == 0)
print(result)
이 방식은 리스트를 만들지 않고(지연 계산) sum이 값을 소비하므로 메모리 측면에서도 유리합니다.
흔한 실수와 트러블슈팅
1) range를 list로 감싸는 습관
아래처럼 작성해도 결과는 같지만, 굳이 리스트를 만들 필요가 없습니다.
# 비추천: 불필요한 리스트 생성
result = sum(list(range(1, 101)))
range는 이미 반복 가능한(iterable) 객체이므로 sum(range(...))가 가장 깔끔합니다.
2) 범위 경계 실수로 4950이 나오는 경우
print(sum(range(1, 100))) # 4950 (1~99)
원인: stop 미포함 규칙을 놓침.
해결: sum(range(1, 101))
3) sum에 start 인자를 활용하면 더 안전해진다
sum(iterable, start)에서 start는 초기값입니다. 기본은 0이지만, 타입이 섞일 수 있는 상황이나 의도를 명확히 하고 싶을 때 유용합니다.
result = sum(range(1, 101), 0)
대부분의 경우는 굳이 필요 없지만, 팀 코드에서는 “합의 초기값은 0”이라는 의도를 드러내는 데 도움이 될 때가 있습니다.
성능과 파이썬다운 코드 관점
1~100 정도는 성능 차이가 의미 없지만, 습관은 큰 데이터에서 차이를 만듭니다.
range는 실제로 모든 숫자를 메모리에 올리는 리스트가 아니라, 필요할 때 값을 생성하는 객체입니다.sum(range(...))는 CPython에서 충분히 최적화된 경로를 타는 편이며, 일반적인 누적 반복문보다 코드가 짧고 실수 여지가 적습니다.
다만 “가독성이 최고”인 해법을 고르는 것도 중요합니다. 팀 코드에서는 한 줄로 끝내는 것이 오히려 명확할 때가 많지만, 조건이 복잡해지면 중간 변수를 두거나 함수로 분리하는 편이 더 읽기 좋습니다. 이 관점은 깔끔한 코드 작성 습관과도 연결됩니다. 자세한 스타일 관점은 내부 글인 개발자 멋의 정석 깔끔한 코드로 신뢰를 쌓는 법에서도 비슷한 원칙을 다룹니다.
보너스 반복문 없이 수학 공식으로도 가능하지만
수학적으로는 등차수열 합 공식으로 한 번에 계산할 수도 있습니다.
n = 100
result = n * (n + 1) // 2
print(result) # 5050
이 방식은 가장 빠르고, 큰 수에도 효율적입니다. 하지만 문제의 의도가 “파이썬 내장 함수로 깔끔하게 합을 구하라”라면 sum(range(...))가 더 파이썬스럽고 확장(필터/스텝 등)도 쉽습니다.
결론
1부터 100까지 합은 반복문 없이sum(range(1, 101))한 줄로 해결할 수 있습니다.range의 끝값은 포함되지 않으므로 100까지 포함하려면101을 써야 합니다.- 리스트로 감싸지 말고
range를 그대로sum에 넘기는 것이 깔끔하고 효율적입니다. - 조건 합산은
sum(x for x in range(...) if ...)형태로 자연스럽게 확장 가능합니다.
이 패턴을 익혀두면, 단순 합 문제뿐 아니라 데이터 처리 코드에서도 반복문을 줄이고 더 읽기 쉬운 파이썬 코드를 작성하는 데 도움이 됩니다.