본문 바로가기
백준알고리즘/그리디 알고리즘

(Python/🥈2)백준알고리즘 1541번 : 잃어버린 괄호

by windy7271 2023. 6. 15.
728x90
반응형

 

문제 바로가기 

https://www.acmicpc.net/problem/1541
백준 알고리즘 잃어벌니 괄호

 

문제:

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다. 괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력:

 

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

출력:

 

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

 

풀이: 

처음에는 eval 함수를 사용하여 풀려고 했다.

eval 함수란 리스내에 연산기호가 있어도 그거를 계산하여 돌려주는 것이다 예를들면 ["2+3"] 인데 eval(list) 넣어주면 5를 리턴해준다.

00009-00009 가 되지않고 lstrip 을 써도 에러가 난다. 이유를 모르겠다.

import sys
board = sys.stdin.readline().strip().split("-")
res = sum(int(i) for i in board[0].split("+"))
for i in range(1, len(board)):
    num = eval(board[i].lstrip("0"))
    res -= num

print(res)

SyntaxError

이 에러가 나오는데 문제의 테스트 케이스는 다 통과하는데 어디에서 막히는지 모르겠다.

 

 

하지만 그 방법이 되지않아 다른 방법을 사용해본다 + 기준으로 잘라주고 안에 있는 식들을 다 빼주는 식이다.

 

import sys
sys.stdin = open('/Users/song/Desktop/Python/Python/h.txt', 'r')

board = sys.stdin.readline().split("-")
res = 0
for i in board[0].split("+"):
    res += int(i)
for i in board[1:]:
    for j in i.split("+"):
        res -=int(j)
print(res)
반응형

댓글