공부 기록장

[백준 - Python] 1541. 잃어버린 괄호 (그리디) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 1541. 잃어버린 괄호 (그리디)

빛나무 2024. 1. 3. 18:15

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

코드

eq = input().split('-')

answer = 0
for i in eq[0].split('+'):
    answer += int(i)

for i in eq[1:]:
    for j in i.split('+'):
        answer -= int(j)

print(answer)

 

문제 이해를 잘못 했다.

괄호를 한 쌍만 사용해서 식의 값을 최소로 만드는 것인줄 알았는데,

괄호를 쓰고 싶은 만큼 쓸 수 있는 것이었다.

 

문제를 제대로 이해했다면 아이디어를 떠올릴 수 있었을까?

 

+ 부호 연산을 먼저 전부 계산하고,

계산된 숫자들을 이용해 - 연산을 수행하면 최소값을 얻을 수 있다.

 

해당 아이디어를 떠올리는 것은 어렵지 않은데,

아디이어를 어떻게 구현할 지가 더 관건이었던 것 같다.

 

입력으로 들어온 문자열을 - 부호를 기준으로 잘라서 eq 리스트에 저장한다.

eq 리스트에 저장된 각 요소들을,

이번에는 + 부호를 기점으로 잘라서 덧셈식을 계산해준다.

 

생각한 대로라면 덧셈식을 계산한 후에,

정답으로 반환할 값에서 덧셈식의 결과값을 빼주어야 맞지만,

구현적으로는 덧셈식의 정수들을 순차적으로 빼주는 식으로 구현하였다.