티스토리 뷰
728x90
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
1. 접근 방식
- 먼저 입력 받은 식을 파싱하자.
split()을 사용하면 구분자인 +, -가 사라지기 때문에 for문으로 하나씩 접근해서 파싱한다.
파싱 결과는 후처리가 수월하도록 리스트 형태로 한다.
- 최소값을 만드는 방법은 덧셈 부분을 최대한 합치는 것이다.
따라서 파싱한 결과를 순회하면서 위 그림과 같은 리스트가 나오도록 덧셈 부분을 모두 더한다.
이후 위 리스트를 식으로 생각하여 계산하면 최소값이 도출된다.
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
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] 1931번 회의실 배정 파이썬 풀이 (0) | 2023.08.19 |
---|---|
[백준] 9095번 1, 2, 3 더하기 파이썬 풀이 (0) | 2023.08.18 |
[백준] 2491번 수열 파이썬 풀이 (0) | 2023.08.15 |
[백준] 14916번 거스름돈 파이썬 풀이 (0) | 2023.08.15 |
[백준] 1991번 트리 순회 파이썬 풀이 (0) | 2023.08.14 |