language study/python | 문제 풀이

[백준] 8393 합

지그농 2026. 1. 8. 17:30
문제 정보
문제 링크 : BOJ 2467 용액 
문제 난이도 : 브론즈 5
유형 : 수학, 구현

 

1. 문제 접근

해당 문제는 브론즈 5 난이도로,
파이썬을 사용할 줄 안다면 비교적 간단하게 풀 수 있는 문제였다.

 

다만 이 문제는 지난 회고 이후 처음으로 의식적으로 접근해본 문제였기 때문에,
처음에는 기존에 내가 풀어오던 방식 그대로 한 번 풀어본 뒤,
그 다음에 AI의 코드 리뷰를 받아 리팩토링을 진행해보았다

 

 

2. 첫번째 접근

import sys

input = sys.stdin.readline
n = int(input())
answer = 0 
for num in range(1, n+1):
    answer += num
print(answer)

 

가장 먼저 떠올린 방법은 for 문을 사용해 1부터 n까지 순회하며 값을 더하는 방식이었다.
입력 범위가 매우 좁았기 때문에 시간 복잡도 측면에서도 충분히 가능한 풀이였고,
그동안 알고리즘 문제를 풀 때 자주 사용해오던 익숙한 접근 방식이기도 했다.

 

 

 

3. 리팩토링

n = int(input())
print(sum(range(1, n + 1)))

 

파이썬의 내장 함수인 sum과 range를 활용하면,
같은 문제를 단 두 줄의 코드로 해결할 수 있었다.

 

기존의 for 문을 제거해도
“1부터 n까지의 범위를 모두 더한 값”이라는 의도가
코드 자체에 더 명확하게 드러난다.

 

 

n = int(input())
print(n * (n + 1) // 2)

 

해당 문제는 알고리즘 유형상 수학에 가까운 문제였기 때문에,
반복문이나 내장 함수를 사용하지 않고도 수학 공식을 통해 해결할 수 있었다.

 

 

이 방식은 시간 복잡도가 O(1)로,
구현 자체보다는 문제의 규칙을 수학적으로 해석하는 사고에 더 집중한 코드라는 점에서 앞선 풀이들과 또 다른 의미를 가진다.

이를 함수 형태로 작성하면 다음과 같다.

 

def solution():
    n = int(input())
    return n * (n + 1) // 2

print(solution())

 

 

4. Review

솔직히 말하면, 이 문제 자체가 어려운 문제는 아니었다.


하지만 간단한 리팩토링 과정을 거치면서,
평소 알고리즘 문제를 풀며 얻었던 배움과는 결이 다른 깨달음을 얻을 수 있었다.

 

정답을 맞히는 과정이 아니라,
같은 문제를 어떤 관점으로 바라보고, 어떤 표현을 선택하느냐에 따라
코드의 의미와 내가 고민해야 할 지점이 완전히 달라질 수 있다는 점이었다.

 

그 차이를 가장 직관적으로 느낄 수 있던 문제였다.