백준 1541번 잃어버린 괄호 파이썬

박슬빈·2021년 9월 8일
0

알고리즘

목록 보기
3/40

문제

입력 , 출력

solution

import sys

input = sys.stdin.readline
a = input()
plus = 0
minus = 0
strnumber = ''
ch = 0
for i in range(len(a) + 1):
    if i == len(a) - 1:
        if ch == 0:
            plus += int(strnumber)
            break
        else:
            minus += int(strnumber)
            break
    if a[i] == '+':
        if ch == 0:
            plus += int(strnumber)
            strnumber = ''
        else:
            minus += int(strnumber)
            strnumber = ''
    elif a[i] == '-':
        if ch == 0:
            ch = 1
            plus += int(strnumber)
            strnumber = ''
        else:
            minus += int(strnumber)
            strnumber = ''
    elif a[i] != '+' and a[i] != '-':
        strnumber += a[i]
print(plus - minus)

설명

접근한 방법은 처음 '-' 가 나오기 전까지는 다 더하고 그 이후에는 다 빼면 되는 것이다.
예를 들어보면 10+20-30+20+30-20+30-20+30 이라고치면 괄호를
10+20-(30+20+30)-(20+30)-(20+30) 이렇게 만들면 된다.
즉 마이너스가 한번 나오면 뒤에는 전부 뺄수있는 숫자가 된다
그래서 ch는 -가 한번이라도 나왔는지 체크하기위한 변수이다
ch가 0이면 계속 더하고 ch가 1이면 계속 빼는 것이다.
그래서 조건문으로 -가 처음나왔을때 ch가 0이기때문에 처음 - 바로앞에 숫자는
plus 해주고 뒤에부터는 - 가 나와도 앞에 숫자를 minus에 값을 넣었다.

후기

접근은 했는데 파싱부분에서 시간을 쓰고 조건을 어떻게 해야할지 구상하느라 푸는 시간이 좀 오래 걸렸던것 같다.
하드코딩을 한것같은데 파이썬 문법을 잘 몰라서 그냥 무식하게 조건을 넣었다..

profile
이것저것합니다

0개의 댓글