- Published on
파이썬으로 1부터 100까지 합계 구하는 3가지 방법 비교와 실전 팁
- Authors
- Name
- 스타차일드
- https://x.com/ETFBITX
서론
코딩을 처음 배울 때 가장 자주 만나는 문제 중 하나가 “1부터 100까지 더해라”입니다. 단순해 보이지만, 여기엔 반복문/내장 함수/수학적 사고까지 다양한 접근이 숨어 있습니다. 더 중요한 건 “정답을 맞히는 것”보다, 상황에 맞는 방법을 고르고 실수를 줄이는 습관을 만드는 것입니다.
이번 글에서는 파이썬으로 1부터 100까지 합계를 구하는 3가지 방법을 코드로 구현하고, 각각의 장단점(가독성, 확장성, 성능, 실수 포인트)을 실전 관점에서 비교해보겠습니다.
준비: 목표와 검증 기준
우리가 구할 값은 다음입니다.
- 대상: 1, 2, 3, ..., 100
- 결과: 5050
어떤 방식이든 결과가 동일한지 검증하는 습관이 중요합니다. 간단한 assert를 기준으로 삼아봅시다.
EXPECTED = 5050
방법 1: for 반복문으로 누적하기 (가장 기본)
코드
total = 0
for i in range(1, 101):
total += i
print(total)
assert total == 5050
왜 많이 쓰나
- 초보자에게 가장 직관적입니다.
- 누적 합의 원리를 이해하기 좋습니다.
- 조건을 추가하기 쉽습니다. (예: 짝수만 더하기, 특정 값 제외 등)
예를 들어 “3의 배수만 합산”으로 요구사항이 바뀌면 다음처럼 바로 확장됩니다.
total = 0
for i in range(1, 101):
if i % 3 == 0:
total += i
print(total)
실수 포인트 (트러블슈팅)
- range 경계 실수
range(1, 100)은 1~99까지만 포함합니다.- 1~100을 포함하려면
range(1, 101)이 맞습니다.
- 변수명 충돌
sum = 0처럼 내장 함수sum()과 같은 이름을 변수로 쓰면 나중에 문제가 됩니다.
sum = 0
# ...
print(sum([1, 2, 3])) # TypeError: 'int' object is not callable
Best Practice: total, acc, result 같은 이름을 추천합니다.
방법 2: sum() + range()로 한 줄에 끝내기 (파이썬답게)
파이썬에서는 합계를 구하는 내장 함수 sum()이 있습니다. 여기에 range()를 결합하면 가장 깔끔한 코드가 됩니다.
코드
total = sum(range(1, 101))
print(total)
assert total == 5050
장점
- 가독성 최고: 의도가 한 줄에 명확합니다.
- 파이썬 표준 라이브러리만 사용하므로 의존성이 없습니다.
- 대부분의 실무 코드에서 선호됩니다.
실수 포인트 (트러블슈팅)
- 앞서 말한 것처럼
sum이라는 이름을 변수로 쓰면sum()을 호출 못 합니다. range(1, 101)경계는 여전히 주의해야 합니다.
Best Practice: 범위를 변수로 분리하기
요구사항이 바뀔 수 있다면 하드코딩을 줄이세요.
start, end = 1, 100
# end 포함을 위해 +1
result = sum(range(start, end + 1))
print(result)
assert result == 5050
이 패턴은 이후 “1N 합”, “AB 합”으로 확장할 때 특히 유용합니다.
방법 3: 수학 공식으로 O(1)에 계산하기 (가장 빠르고 우아함)
1부터 n까지의 합은 잘 알려진 공식이 있습니다.
1 + 2 + ... + n = n(n+1)/2
여기서 n=100이면 100*101/2 = 5050입니다.
코드
n = 100
result = n * (n + 1) // 2
print(result)
assert result == 5050
왜 //를 쓰나
/는 파이썬에서 항상 float를 반환합니다.- 우리는 정수 결과를 원하므로 정수 나눗셈
//가 더 안전합니다.
n = 100
print(n * (n + 1) / 2) # 5050.0 (float)
print(n * (n + 1) // 2) # 5050 (int)
장점
- 반복이 없어서 이론적으로 가장 빠릅니다. (시간복잡도 O(1))
- 큰 n에서도 성능이 매우 좋습니다.
단점 및 주의점
- “1부터 n까지”처럼 연속된 자연수 합에만 쓸 수 있습니다.
- 조건이 들어가면(짝수만, 3의 배수만 등) 공식이 복잡해지거나 다른 접근이 필요합니다.
세 방법 비교: 언제 무엇을 쓰면 좋을까
| 방법 | 코드 길이 | 가독성 | 확장성(조건 추가) | 성능 | 추천 상황 |
|---|---|---|---|---|---|
| for 누적 | 중간 | 좋음 | 매우 좋음 | 보통 | 조건/필터가 있는 합계 |
| sum+range | 짧음 | 매우 좋음 | 좋음 | 좋음 | 단순 연속 범위 합 |
| 수학 공식 | 짧음 | 중간(공식 이해 필요) | 낮음 | 매우 좋음 | 1~n 같은 전형 문제, 큰 n |
실무적으로는:
- 단순 합계:
sum(range(...)) - 조건이 들어간 합계:
for또는sum( ... for ... if ... ) - 초대형 n에서 연속 합: 수학 공식
추가로, 조건이 있는 경우 sum()에 제너레이터를 넣는 방식도 많이 씁니다.
# 1~100 중 짝수 합
result = sum(i for i in range(1, 101) if i % 2 == 0)
print(result)
자주 하는 실수 모음 (빠른 체크리스트)
range(1, 100)과range(1, 101)을 헷갈린다.sum을 변수명으로 써서 내장 함수sum()을 덮어쓴다.- 수학 공식에서
/를 써서 float가 나온다. →//사용. - 문제 조건이 바뀌었는데도 공식으로 우기다가 복잡해진다. → 조건이 있으면 반복/필터로 전환.
(참고) 작은 자동화 습관: 출력 검증과 재사용
합계처럼 단순한 코드도 함수로 만들고 테스트를 붙이면 품질이 올라갑니다.
def sum_1_to_n(n: int) -> int:
return n * (n + 1) // 2
assert sum_1_to_n(100) == 5050
파이썬으로 이런 작은 유틸을 쌓아가다 보면, 나중에 네트워크/시스템 자동화로도 자연스럽게 확장됩니다. 예를 들어 파이썬으로 환경 정보를 확인하고 자동화하는 흐름이 궁금하다면 파이썬으로 내 컴퓨터 IP 주소 확인과 변경 감지 자동화 같은 글도 함께 보면 좋습니다.
결론
- 1부터 100까지 합계는 파이썬에서 반복문, sum(range()), 수학 공식으로 풀 수 있습니다.
- 가장 파이썬다운 기본 해법은
sum(range(1, 101))입니다. - 조건이 붙으면
for누적(또는 제너레이터+sum)이 유리합니다. - 연속된 자연수 합처럼 공식이 명확한 경우엔
n*(n+1)//2가 가장 빠르고 간결합니다.
핵심은 “정답 하나”가 아니라, 요구사항 변화와 실수 가능성까지 고려해 선택하는 것입니다.