백준_1541 (잃어버린 괄호_실버2_그리디_isdigit()_split('문자'))

RostoryT·2022년 7월 11일
0

DP and Greedy

목록 보기
9/12




메모

메모한 것

괄호를 활용해 식의 결과를 최소로 만들어야함

  • 출력 결과는 음수 가능
    • 그래서

입력값은 0으로 시작 가능

비교적 뒤쪽에 있는 수는 더하기로 큰 수를 만들어줘야 나중에 뺄 때 -가 커짐

  • 뒤에서부터 풀스캔해야하나?

알고리즘

  1. minus = 0 # 앞이 '-'인 값들을 넣어줌 (음수끼리 더해주는 변수로, 마지막에 한번에 -해줄거)
    plus = 0 # 앞이 '+'인 값들을 넣어줌
  2. 뒤에서부터 거꾸로 풀스캔
    • if i isdigit():
    • '+'가 나오면 plus에 [i+1]을 계속해서 더해준다 (그래야 나중에 뺄 때 크게 빼줄 수 있다)
    • '-'가 나오면 minus에 plus를 더해줌(나중에 한번에 -할거라)
  3. 마지막으로 print(ans = plus - minus목록들)
    • 이때 plus에 num(=현재위치값)도 포함이어야 함

변수

  • num : 현재 숫자 (초기화를 위해 -1을 활용함)
  • plus : 더해주기 값들 (마지막에 num이랑 같이 '+' 되어서 출력되어야함)
  • minus : 뒤에서부터 빼주기할 값들의 합(=마이너스할 값 히스토리)

솔루션 코드 - 내가 푼

  • 메모리 초과 문제 발생할 것 같아서 최대한 리스트 안쓰고 해봤는데 살짝 지저분
    • 리스트 쓰면 쉽게 풀 것 같은데 초과 안뜰까?
import sys
arr = sys.stdin.readline()
leng = len(arr)

num = '-1'
plus = 0
minus = 0

for i in range(leng-1, -1, -1):
    if arr[i].isdigit():
        if num == '-1':                 # 숫자 처음인 경우
            num = str(arr[i])
        else:                           # 처음이 아닌 경우
            num = str(arr[i]) + num
            
    else:
        if arr[i] == '+':
            plus += int(num)
            num = '-1'                  # 숫자 처음으로
        elif arr[i] == '-':
            minus += int(num) + plus   # 현재 숫자와 히스토리(plus)를 더해줌
            plus = 0
            num = '-1'                  # 숫자 처음으로

print(plus + int(num)-minus)            # 현재 숫자 + plus값 + minus목록들


솔루션 코드 - 블로그

a = input().split('-')          # '-'로 split()해서 큼직큼직 잘라줌 = 괄호 작업!!!
num = []

for i in a:
    cnt = 0
    s = i.split('+')           # (  )로 묶인 것에 대해서    
    for j in s:               # sum()을 해줌
        cnt += int(j)
        
    num.append(cnt)            # sum()한 각 숫자를 리스트에 저장
    
n = num[0]                     # sum()한 것 중 첫 번째 값에서 나머지 전부 빼줄거
for i in range(1, len(num)):
    n -= num[i]
    
print(n)


솔루션 코드2 - 블로그

arr = input().split('-')
s = 0

for i in arr[0].split('+'):
    s += int(i)
    
for i in arr[1:]:
    for j in i.split('+'):
        s -= int(j)
print(s)
profile
Do My Best

0개의 댓글