티스토리 뷰

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net


1. 접근 방식

  • 먼저 입력 받은 식을 파싱하자.

parse() 결과

split()을 사용하면 구분자인 +, -가 사라지기 때문에 for문으로 하나씩 접근해서 파싱한다.

파싱 결과는 후처리가 수월하도록 리스트 형태로 한다.

 

 

  • 최소값을 만드는 방법은 덧셈 부분을 최대한 합치는 것이다.

compute_add_parenthesis() 결과

따라서 파싱한 결과를 순회하면서 위 그림과 같은 리스트가 나오도록 덧셈 부분을 모두 더한다.

이후 위 리스트를 식으로 생각하여 계산하면 최소값이 도출된다.

 

 

 

2. 정답 코드

def parse(string):
    parsed = []

    temp = ""
    for x in string:
        if x == "+" or x == "-":
            parsed.append(int(temp))
            parsed.append(x)
            temp = ""

        else:
            temp += x
    parsed.append(int(temp))

    return parsed

def compute_add_parenthesis(expr):
    computed = [expr[0]]

    for x in expr[1:]:
        if x == "+":
            continue

        if x == "-":
            computed.append(x)

        else:
            if computed[-1] == "-":
                computed.append(x)

            else:
                computed[-1] += x

    return computed

def calculate(expr):
    result = expr[0]

    for value in expr[2::2]:
        result -= value

    return result


# main
expression = parse(input())
expression = compute_add_parenthesis(expression)

print(calculate(expression))
728x90