[백준] 잃어버린 괄호

코딩코딩·2022년 5월 24일
0

표현식의 계산 순서를 임의로 정한 뒤, 계산 결과 중 가장 작은 값을 나타내기

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

22-05-24

import re


expression = re.sub(r'\d+',lambda x : str(int(x.group())),str(input())) # 0009 -> 9로 처리해서 받음

while re.findall(r'\d+[+-]',str(expression)) :
    opr = re.findall(r'[+-]',expression)
    
    if len(opr) > 1 and (opr[0] == '-') and (opr[1] == '+'): # 두번째 항 계산
        expression = re.sub(r'\d+[+]\d+',lambda x: str(eval(x.group())),expression, count =1 )
    else:# 첫번째 항 계산
        expression = re.sub(r'[-]?\d+[+ -]\d+',lambda x: str(eval(x.group())),expression, count =1 ) 
    
print(expression)

계산 속도: 132ms

정규 표현식으로 코드를 잘 작성했으나, 위 해설보다 좀 더 영리한 방법이 있음

  1. split을 사용할 것
  2. 정규 표현식 사용안해도 풀 수 있음
  3. 코드가 3줄 정도로 끝날 수 있음.

24-06-21

input_f = '+'+input()

# 00009 -> 9
while '+0' in input_f or '-0' in input_f:
  input_f = input_f.replace("+0","+")
  input_f = input_f.replace("-0","-") 
  
# 30-45+72-60 => [30, 45+72, 60]
minus_split = input_f.split('-')
answer = eval(minus_split[0])

if len(minus_split) > 1:
  for minus in minus_split[1:]:
    answer -= eval(minus)

print(answer)
  1. 수식의 값을 최소로 만들기 위해서는 '-' 부호 뒷 수식을 먼저 계산해야 한다. 단, 뒷 수식이 '-'로 이루어진 경우는 순서가 상관이 없다.
    예시) 30-45+72 => 30 - (45+72)
    예시) 30-45-72+60 => 30 - (45 - (72+60)) => 30 - 45 - (72+60)
    예시) 30-45-72-60 => 30 - (45 - (72 - (60))) => 30 - 45 - 72 - 60

  2. '00009' -> '9' 로 변환하기 위해서 처음 인풋에 '+'를 붙여준다. '+0' -> '+' 로 변경

profile
심심해서 하는 코딩..

0개의 댓글