본문 바로가기
Algorithm/etc

[파이썬] 백준 1541 : 잃어버린 괄호 (실버2)

by 베짱이28호 2023. 6. 20.

[파이썬] 백준 1541 : 잃어버린 괄호 (실버2)

 

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net


문제


풀이

0.방향성 생각

첫 번째로 -가 등장하면 그 이후부터는 괄호를 적절히 묶어서 전부 값을 뺄 수 있다.

ex) 50-10+50-20+10 = 50 - (10+50)-(20+10)

첫 -의 위치를 찾고 전 후로 나눠서 계산한다

1. - 위치 찾기

s = input()
answer = 0
for idx,val in enumerate(s):
    if val == '-' :
        start = idx
        break
    else : # 식에 - 없는 경우
        start = -1

식에 -가 있는 경우, 없는 경우를 나눠서 start 인덱스를 따온다.

없을 경우 -1로 받는다.

 

2. 합 계산하기

if start == -1 :
    temp = s.split('+')
    for i in temp :
        answer += int(i.lstrip('0'))
else :
    temp = s[:start]
    temp = temp.split('+')
    
    for i in temp : # 양수부분 
        answer += int(i.lstrip('0'))
    
    temp = s[start+1:]
    temp = temp.replace('-','+') # 첫 - 뒤에는 괄호를 적절히 묶어서 전부 뺄 수 있음
    temp = temp.split('+')
    for i in temp :
        answer -= int(i.lstrip('0'))

print(answer)

 

입력 s을 리스트 형태로 변환해주고 앞에 있는 0을 제거하면서 답에 더하거나 빼준다.


전체코드

s = input()
answer = 0
for idx,val in enumerate(s):
    if val == '-' :
        start = idx
        break
    else : # 식에 - 없는 경우
        start = -1

if start == -1 :
    temp = s.split('+')
    for i in temp :
        answer += int(i.lstrip('0'))
else :
    temp = s[:start]
    temp = temp.split('+')
    
    for i in temp : # 양수부분 
        answer += int(i.lstrip('0'))
    
    temp = s[start+1:]
    temp = temp.replace('-','+') # 첫 - 뒤에는 괄호를 적절히 묶어서 전부 뺄 수 있음
    temp = temp.split('+')
    for i in temp :
        answer -= int(i.lstrip('0'))

print(answer)

 

코멘트

- 이후로 전부 뺄 수 있다는 생각하면 어렵지 않게 구현 가능하다.

처음에 생각을 못해서 삽질좀 했다

댓글