본문 바로가기
Algorithm/백준 문제풀이

[python] 1541번 - 잃어버린 괄호

by B_Tori 2021. 11. 23.

문제

파이썬 문제 풀이

괄호를 이용하여 최소의 결과를 얻어내는 문제이다.

가장 작은 값을 얻기 위한 방법을 간단하게 생각하면 가장 큰 값을 빼주면 된다.

즉 마이너스 연산을 만나면 가장 큰 값을 빼주면 된다.

가장 큰 값을 빼주기위해 마이너스를 만나게 되면 다음 마이너스까지 있는 플러스 연산들을 모두 괄호로 묶어 가장 큰 수를 만들어주면 된다.

eval함수를 이용한 코드 : 틀림

import sys
input = sys.stdin.readline

inputExp = input().rstrip().split("-")

resultExp = 0

for index, i in enumerate(inputExp) :
  if index == 0 :
    resultExp += eval(i)
  else :
    resultExp -= eval(i)

print(resultExp)

-를 기준으로 분리한 식들의 값을 구하는 과정을 eval함수를 사용한 방법이다.

보통의 경우 알맞게 나왔지만,

문제의 예제 입력3인 00009 - 00009에서 오류가 발생했다.

SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers

오류의 내용은 숫자 앞에 0이 선행으로 나왔기 때문이다.

따라서 eval함수를 사용하지 않는 방법을 찾기로 했다.

+를 기준으로 다시 나누어 숫자 하나하나 접근하는 코드

import sys
input = sys.stdin.readline

inputExp = input().rstrip().split("-")

resultExp = 0

for index, i in enumerate(inputExp) :
  for j in i.split("+") :
    if index == 0 :
      resultExp += int(j)
    else :
      resultExp -= int(j)

print(resultExp)

결국 -로 분리한 식들을 다시 한번 +로 분리하여 첫 번째 식만 result에 더하고 나머지 식은 -로 연결되었던 식이므로 result에서 빼주는 작업을 하였다.

+로 분리하여 숫자 하나하나 접근하였고, 접근한 숫자(문자열 : 입력값은 문자열이기 때문)를 int()를 통해 문자열로 쓰인 숫자를 정수형으로 바꾸어 계산할 수 있도록 하였다.

int() 과정에서 0009와 같은 숫자도 9로 치환되었기 때문에 오류 없이 해결할 수 있었다.

'Algorithm > 백준 문제풀이' 카테고리의 다른 글

[python] 13305번 - 주유소  (0) 2021.11.24
[python] 1931번 - 회의실 배정  (0) 2021.11.23
[python] 2108번 - 통계학  (0) 2021.09.08
[python] 18870번 - 좌표 압축  (0) 2021.09.03
[python] 10814번 - 나이순 정렬  (0) 2021.09.03

댓글