문제 정보
문제 링크 : 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
솔직히 말하면, 이 문제 자체가 어려운 문제는 아니었다.
하지만 간단한 리팩토링 과정을 거치면서,
평소 알고리즘 문제를 풀며 얻었던 배움과는 결이 다른 깨달음을 얻을 수 있었다.
정답을 맞히는 과정이 아니라,
같은 문제를 어떤 관점으로 바라보고, 어떤 표현을 선택하느냐에 따라
코드의 의미와 내가 고민해야 할 지점이 완전히 달라질 수 있다는 점이었다.
그 차이를 가장 직관적으로 느낄 수 있던 문제였다.
'language study > python | 문제 풀이' 카테고리의 다른 글
| [백준] 수학 | 최대공약수(GCD) 문제 풀이 전략과 관련 문제 (0) | 2026.01.23 |
|---|---|
| [백준] 1929 소수 구하기 (0) | 2026.01.08 |
| [백준] 2467 용액 풀이 (Python) (0) | 2025.11.24 |
| [백준] 3079 입국심사 풀이 (Python) (0) | 2025.11.24 |