기록하는삶

[코딩 테스트 연습(파이썬/Python)] 백준 1541번 _ 잃어버린 괄호 본문

백준(Python)/문자열

[코딩 테스트 연습(파이썬/Python)] 백준 1541번 _ 잃어버린 괄호

mingchin 2021. 12. 18. 02:19
728x90
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

[문제]

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

[입력]

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

[출력]

첫째 줄에 정답을 출력한다.

 

[아이디어]

1) 숫자들을 모두 찾아 왼쪽에 있는 0은 제거한다.(str.lstrip('0'))

2) '-'가 한번 등장하면, 이후에 나오는 모든 숫자는 음수화가 가능하다.

3) '-' 등장 이후 나오는 모든 '+'는 '-'로 바꾼다.

4) eval로 str을 연산한다.

import re
a = input()
x = re.compile('[0-9]+')
tmp = re.findall(x,a)
for s in tmp:
    a = re.sub(s,s.lstrip('0'),a)
for i in range(len(a)):
    if a[i]== '-':
        a = a[:i]+a[i:].replace('+','-')
print(eval(a))

문자열은 항상 re 모듈을 적당히 사용하면 좋은 효율이 나오는 것 같다. 다만 코테에서 사용하려면 사용법을 잘 외워둘 필요가 있겠다.

728x90
반응형