https://www.acmicpc.net/problem/1541
식에서 적절하게 괄호를 넣어 가장 작은 숫자를 만들면 되는 문제다.
그리디 문제라 간단한 규칙만 찾으면 되는 문제다.
55-50+40
예시 입력이 이렇게 있을 때,
-가 나오기 전에 나왔던 모든 숫자들을 더해서
-가 나온 순간부터 뒤에 있는 모든 숫자들의 합을 빼면 된다.
import re
num = input()
plus_minus = []
for c in num :
if not c.isdigit() :
plus_minus.append(c)
num = re.split('[+|-]', num)
plus_minus_index = 0
minus = []
plus = []
minus_bool = False
for i in range(len(num)) :
if i == 0 :
plus.append(int(num[i]))
else :
if plus_minus[plus_minus_index] == '+' and not minus_bool:
plus.append(int(num[i]))
plus_minus_index+=1
elif plus_minus[plus_minus_index] == '+' :
if minus_bool :
minus.append(int(num[i]))
plus_minus_index+=1
elif plus_minus[plus_minus_index] == '-' :
minus.append(int(num[i]))
minus_bool = True
plus_minus_index+=1
print(sum(plus)-sum(minus))
좀 더 쉽게 풀 수 있을 거 같은데.. 코드가 볼 맛이 안 난다...
우선 입력 값을 가공해 준다.
55-50+40
입력이 주어지면
숫자는 숫자대로
부호는 부호대로 리스트에 저장해 준다.
num = input()
plus_minus = []
for c in num :
if not c.isdigit() :
plus_minus.append(c)
num = re.split('[+|-]', num)
이 코드다.
그다음 위에서 말했던 대로 알고리즘을 짜면 된다.
끝!
[백준/파이썬]1927 최소 힙 (0) | 2023.06.18 |
---|---|
[백준/파이썬]1018 체스판 다시 칠하기 (0) | 2023.06.16 |
[백준/파이썬]1463 1로 만들기 (1) | 2023.06.09 |
[백준/파이썬]15650 N과 M(2) (0) | 2023.06.08 |
[백준/파이썬]15649 N과 M(1) (0) | 2023.06.07 |