728x90
문제 링크
https://www.acmicpc.net/problem/1541
TIL
- 문제를 잃고 처음에는 어떻게 풀어야하나 고민했으나 '-'가 중요한 역할이라고 생각했다.
- -가 나오지 않는 이상 무조건 +이므로 다 더해질 것이고,
-가 나오면 그 뒤에 오는 모든 숫자는 그 다음 -가 나오기 전까지 모두 더하는 것이 가장 큰 수를 뺄 수 있는 방법이라고 생각 - 그래서 -를 기준으로 분할을 하고, 분할한 것들을 +를 기준으로 분할하여 숫자를 구했다
- 파이썬의 매우 유용한 기능 split 사랑훼
- -가 나오지 않는 이상 무조건 +이므로 다 더해질 것이고,
- 이 방법이 왜 그리디인지??
- 그리디 알고리즘에서는 현재 상태에서 가장 좋은 선택을 계속해서 취하고 그 선택들이 합쳐져서 최적의 해를 만든다고 가정한다
- 이 문제에서도 - 연산자를 기준으로 수식을 나누고, 나누어진 후에는 각각의 부분을 최대한 최소화하려는 선택을 계속해서 하므로, 그리디 알고리즘을 적용했다고 할 수 있다
- 처음에는 당황했으나 차분히 생각하여 5분도 안걸려서 풀었던 문제
Code
temp = list(input().split('-'))
t_len = len(temp)
operand = []
for t in temp:
nums = list(map(int, t.split('+')))
operand.append(sum(nums))
if len(operand) >0 :
ret = operand[0]
for i in range(1, len(operand)):
ret -= operand[i]
print(ret)
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 12919번: A와 B 2 (0) | 2025.04.16 |
---|---|
[BOJ] 1931번: 회의실 배정 (Greedy) (0) | 2025.04.15 |
[BOJ] 1916번: 최소비용 구하기 (Dijkstra) (0) | 2025.04.06 |
[BOJ] 1261번: 알고스팟 (Dijkstra) (0) | 2025.04.06 |
[BOJ] 1504번: 특정한 최단 경로 (Dijkstra, BFS) (0) | 2025.04.06 |