[파이썬] 백준 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)
코멘트
- 이후로 전부 뺄 수 있다는 생각하면 어렵지 않게 구현 가능하다.
처음에 생각을 못해서 삽질좀 했다
'Algorithm > etc' 카테고리의 다른 글
[파이썬] 백준 27084 : 카드 뽑기 (골드5) (0) | 2023.06.22 |
---|---|
[파이썬] 프로그래머스 : 양궁대회 (Lv.2) (0) | 2023.06.22 |
[파이썬] 백준 20529: 가장 가까운 세 사람의 심리적 거리 (실버1) (0) | 2023.06.21 |
[파이썬] 백준 1074 : Z (실버1) (0) | 2023.06.05 |
[파이썬] 백준 1992 : 쿼드트리 (실버1) (0) | 2023.06.05 |
[파이썬] 백준 1780 : 종이의 개수 (실버2) (0) | 2023.06.05 |
[파이썬] 백준 2630 : 색종이 만들기 (실버2) (0) | 2023.06.05 |
댓글