[BaekJoon] 백준 1541번 잃어버린 괄호
문제: https://www.acmicpc.net/problem/1541
괄호를 쳐서 최소값이 나오게 만들라는 문제였다.
예시를 보면 55-50+40 의 경우 (55-50+40)이면 45이지만 55-(50+40)이면 -35이다. 이렇게 괄호 위치에 따라 값이 달라질 수 있다.
우선 별다른 알고리즘이 생각나지 않아 규칙을 생각해보았다.
식이 주어졌을 때, - 뒤의 계산값이 크면 클수록 좋고, - 앞의 계산값은 작으면 작을 수록 우리가 원하는 값이 나온다.
두가지로 경우를 나눌 수 있다. (연속으로 같은 연산자가 나올 수 없기 때문)
먼저 -가 먼저 나올 경우 80-30+20-30 이와 같이 나오면 80-(30+20)-(30) 이와 같이 괄호를 치면 모두 음수가 되서 가장 작은 값이 나온다.
두번째로 +가 먼저 나올 경우 80+30-20+30 이와 같이 나오면 (80+30)-(20+30) 이면 최소다.
결국 두 경우로 나눠서 계산해주면 되는 별도의 알고리즘이 필요없는 문제였다. 다만 이것을 생각해내는데 어려울 수 있다고 생각한다.
정리하자면
- -를 기준으로 나눠준다.
- 나눈 값들을 각각 계산(더해)준다.
- 가장 앞의 값에서 뒤에 값들을 전부 빼준다.
arr = input().split("-")
results = []
for i in arr:
cnt = 0
b = i.split("+")
for j in b:
cnt += int(j)
results.append(cnt)
first = results[0]
for i in range(1, len(results)):
first -= results[i]
print(first)
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 11659번 구간 합 구하기 4 (0) | 2021.07.16 |
---|---|
[BaekJoon] 백준 1992번 쿼드트리 (0) | 2021.07.16 |
[BaekJoon] 백준 1389번 케빈 베이컨의 6단계 법칙 (0) | 2021.07.07 |
[BaekJoon] 백준 13458번 시험 감독 (0) | 2021.04.22 |
[BaekJoon] 백준 3190번 뱀 (0) | 2021.04.22 |