Private 난이도 : ♥♥♥♡♡
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
import sys
formula=sys.stdin.readline().strip()
plus_split_formula=formula.split('+') # 일단 +로 먼저 split
splitted_formula=[] #완전히 숫자만 저장될 리스트
for f in plus_split_formula:
splitted=f.split('-') # +로 나뉜 리스트들을 하나씩 가져와서 -로 나눈다
for ff in splitted: #이제 완벽히 나누어진 것들이 splitted에 들어있다.(+로 splilt한 리스트 별로)
no_zero=ff.lstrip('0')
if no_zero != '':
splitted_formula.append(no_zero) # 앞의 0을 제거하고 리스트에 append
else:
splitted_formula.append('0')
# print(splitted_formula) #['55', '50', '40'] #['9', '9']
new_formula=splitted_formula[0] #0이 제거된 새로운 식이 저장될 string
split_num=1 # splitted_formula의 index로 쓰일 int. 첫 번째 숫자는 위에서 사용했으니까 1부터 시작
for f in formula: #식의 첫번쨰 부터 탐색한다.
if f=='+' or f=='-': # 부호가 있으면
new_formula+=f #formula에서 부호만 가져오고
new_formula+=splitted_formula[split_num] # 0을 제거하고 남은 숫자를 가져온다.
split_num+=1 #그 숫자를 가져왔으니 인덱스를 1 더해준다.
result='' #괄호가 들어간 식이 나올 결과
break2=False #2중 for문을 나오기 위한 break 여부
start=True
for i,f in enumerate(new_formula):
if f=='-' and start==False : #괄호 닫기
result += ')'
result += f
start = True
if i!=len(new_formula)-1: #마지막이 아닐떄는 강제로 열어주기
result += '('
start=False
elif f == '-' and start==True: # - 가 나오면 그때 괄호를 넣는다.
result += f # - 를 넣는다
result+='(' # 괄호를 시작
start=False
elif i==len(new_formula)-1 and start==False: # 마지막일 때는 강제로 닫아주기
result += f
result += ')'
else:
result+=f # 괄호 밖의 숫자과 +들
print('result=',result,'=',eval(result))
설명
- 무조건 -가 나올때 시작하고 다음 -가 나오기 전까지 괄호 유지하기
- 숫자 앞의 0 삭제
- 0으로만 이루어진 숫자 삭제하기
알게된 것
- split
원래 알고 있었지만 한 번에 2개의 seperator로 나누지는 못한다는 것을 알게되었다.
그리고 return 값을 받아야지만 그 바뀐 내용이 저장된다. - exal(식)
매번 이런 문제를 풀 때 마다 잊어버린다
eval안의 문자열을 실행해주는 함수 - lstrip()
strip이 문자열 앞 뒤에 띄어쓰기 같은 것을 정리해주는 것은 알고 있었는데, '0'같은 것도 지정해서 없앨 수 있으려나 하고 찾아봤는데 된다!
'개발 > Algorithm' 카테고리의 다른 글
| [Algorithm] 백준 BOJ 1012 유기농 배추 python 파이썬 그래프 실버 2 (0) | 2022.03.23 |
|---|---|
| [Algorithm] 백준 BOJ 2606 바이러스 python 파이썬 그래프 실버 3 (0) | 2022.03.23 |
| [Algorithm] 백준 BOJ 2212 센서 python 파이썬 그리디 골드 5 (0) | 2022.03.18 |
| [Algorithm] 백준 BOJ 2930 가위바위보 python 파이썬 그리디 브론즈 2 (0) | 2022.03.11 |
| [Algorithm] BOJ 2720 세탁소 사장 동혁 python (0) | 2022.03.08 |