본문 바로가기

Algorithm Problems/그리디

[백준/Python] 잃어버린 괄호

문제

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net


문제 요약

주어진 식에 괄호를 적절히 하여 식의 값을 최소로 만들고 정답을 출력한다.

 

식은 '+', '-', '0'~'9' 만으로 이루어져 있다.


코드

string = input()

arr = []
tmp_num = ''

# arr에 string을 부호와 숫자로 나눠서 넣기
for ob in string:
    if ob != '-' and ob != '+':
        tmp_num += ob
    else:
        arr.append(int(tmp_num))
        tmp_num = ''
        arr.append(ob)
arr.append(int(tmp_num))

#print(arr)

# arr에 +가 없을 때까지
while '+' in arr:
    # + 부호를 모두 먼저 계산
    for i in range(len(arr)):
        if i < len(arr) and arr[i] == '+':
            arr.pop(i)
            arr.insert(i - 1, arr.pop(i - 1) + arr.pop(i - 1))
    #print(arr)

# arr에 -가 없을 때까지
while '-' in arr:
    # - 부호를 모두 계산 (음수로 바꾸기)
    for i in range(len(arr)):
       if i < len(arr) and arr[i] == '-':
           arr.pop(i)
           arr.insert(i, -arr.pop(i))

    #print(arr)

print(sum(arr))

코드 설명

괄호를 이용하여 식의 값을 최소로 만들려면 먼저 +연산을 모두 진행하고 -연산을 진행하면 된다.

 

1. 입력 받은 문자열을 숫자와 부호로 구분하여 배열에 저장한다.

 

2. arr에 '+'가 없을 때까지 +부호를 먼저 계산하여 배열에 다시 삽입한다.

 

3. arr에 '-'가 없을 때까지 -부호를 모두 음수로 변경하여 배열에 다시 삽입한다.

 

4. arr의 합을 출력한다.