-
백준 16637 - 괄호 추가하기 (Python)BOJ PS/Python 2023. 6. 5. 18:21
https://acmicpc.net/problem/16637
16637번: 괄호 추가하기
첫째 줄에 수식의 길이 N(1 ≤ N ≤ 19)가 주어진다. 둘째 줄에는 수식이 주어진다. 수식에 포함된 정수는 모두 0보다 크거나 같고, 9보다 작거나 같다. 문자열은 정수로 시작하고, 연산자와 정수가
www.acmicpc.net
브루트포스 문제임은 범위로 바로 알 수 있었다. 식을 어떻게 세울지가 관건이었다.
eval()은 알고만 있고 써 본 적은 없는데, 이렇게 쓰게 될 줄은 몰랐다.import sys from itertools import combinations input=sys.stdin.readline N=int(input()) ex=input().strip() l_ex=[i if not i.isnumeric() else int(i) for i in ex] answer=-2**31-1 for i in range(0,(N+1)//2,2): possibles=combinations([i*2 for i in range((N+1)//2)],i) # 경우의 수 일단 전부 모으고 for j in possibles: calc=True for k in range(0,i,2): # 길이만큼 2개씩 짝지어보면서 if j[k]+2!=j[k+1]: # 짝중에 서로 떨어진 것이 있으면 괄호로 못 묶이니 False calc=False break if calc: # 계산할 수 있다면 t_ex=l_ex[:] for k in range(0,i,2): t_ex[j[k]]=eval(ex[j[k]:j[k]+3]) # 괄호 안의 것 먼저 계산하고 t_ex[j[k]+1]='' # 공백 처리 t_ex[j[k]+2]='' t_ex=[i for i in t_ex if i != ''] # 공백은 빼고 temp=t_ex[0] for k in range(0,len(t_ex)-1,2): # 앞에서부터 계산 if t_ex[k+1]=='+': temp+=t_ex[k+2] elif t_ex[k+1]=='*': temp*=t_ex[k+2] else: temp-=t_ex[k+2] answer=max(answer,temp) print(answer)
'BOJ PS > Python' 카테고리의 다른 글
백준 2352 - 반도체 설계 (Python) (0) 2023.07.03 백준 1103 - 게임 (Python) (0) 2023.07.03 백준 1937 - 욕심쟁이 판다 (Python) (0) 2023.06.05 최대 유량 공부 (0) 2023.06.04 백준 19238 - 스마트 택시 (Python) (0) 2023.06.01