문제 한눈에 보기
| 목표 | 괄호를 적절히 넣어 식의 값을 최소로 만들기 |
| 핵심 전략 | 첫 번째 '-' 뒤의 모든 수를 한꺼번에 빼기 |
| 풀이 방식 | 문자열 분리 + 그리디 |
핵심 1
값을 최소로 만들려면 한 번 빼기 시작한 뒤에는 최대한 많이 빼야 한다.
핵심 2
그래서 첫 '-' 기준으로 문자열을 나누면 된다.
핵심 3
맨 앞 부분은 더하고, 그 뒤 부분들은 각각 합쳐서 전부 뺀다.
최종 코드
s = input()
part = s.split("-")
result = sum(map(int, part[0].split("+")))
for p in part[1:]:
result -= sum(map(int, p.split("+")))
print(result)
풀이 흐름
- 식을
-기준으로 나눈다. - 맨 앞 덩어리는 그대로 더한다.
- 그 뒤 덩어리들은 내부의
+들을 모두 더한 뒤 한꺼번에 뺀다.
예시 이해
55-50+40첫 번째 '-' 뒤를 전부 괄호로 묶으면 55 - (50 + 40) 이 되어 결과는 -35 가 된다. 이것이 최소값이다.
왜 그리디인가?
한 번 '-'를 만난 순간부터 이후 수들을 최대한 크게 묶어서 빼는 것이 항상 이득이다. 이 선택이 전체 최적해로 이어지므로 그리디가 성립한다.
한 문장 정리
잃어버린 괄호는 첫 번째 '-' 뒤의 수들을 전부 묶어 빼면 최소값이 된다는 아이디어만 잡으면 끝나는 그리디 문제다.
'크래프톤 정글 > 정글에서 문제풀기' 카테고리의 다른 글
| [정글 알고리즘] - [중] 백준9251- LCS- 골드5 (0) | 2026.03.28 |
|---|---|
| [정글 알고리즘] - [하] 백준11047- 동전 0- 실버4 (0) | 2026.03.28 |
| [정글 알고리즘] - [하] 백준1904- 01타일- 실버3 (1) | 2026.03.28 |
| [정글 알고리즘] - [하] 백준2748- 피보나치 수 2- 브론즈1 (0) | 2026.03.28 |
| [정글 베이직29]그리디 - 회의실 배정 (0) | 2026.03.28 |