백준 1541번 잃어버린 괄호 파이썬
문제
입력 , 출력
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)
설명
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에 값을 넣었다.
후기
접근은 했는데 파싱부분에서 시간을 쓰고 조건을 어떻게 해야할지 구상하느라 푸는 시간이 좀 오래 걸렸던것 같다.
하드코딩을 한것같은데 파이썬 문법을 잘 몰라서 그냥 무식하게 조건을 넣었다..
Author And Source
이 문제에 관하여(백준 1541번 잃어버린 괄호 파이썬), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@slbin-park/백준-1541번-잃어버린-괄호-파이썬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)