Open jeeyeonLIM opened 3 years ago
expression = "100-200*300-500+20"
num_list = re.split("[+*-]+", expression)
express_list = [i for i in expression if i in '*-+']
sunseo=list(set(express_list))
import itertools
permu_list= list(itertools.permutations(sunseo))
num_list, express_list,sunseo, permu_list
import re
import itertools
def calc(express, num1, num2): if express == "+":return num1+num2 elif express == "-":return num1-num2 elif express == "":return num1num2
def solution(expression): answer = [] num_list = list(map(int, re.split("[+-]+", expression))) express_list = [i for i in expression if i in '-+'] sunseo=list(set(express_list)) permu_list= list(itertools.permutations(sunseo))
for permu in permu_list:
print("start--",permu)
for per in permu:
for i in express_list:
if i== per: # 같은 문자라면 아래 계산 해줌.
num= express_list.index(per)
num_list[num] = calc(express_list[num], num_list[num], num_list[num+1])
num_list.remove(num_list[num+1])
express_list.remove(per)
print(per,express_list, num_list)
if len(express_list)==0:
answer.append(abs(num_list[0]))
elif len(express_list)==1:
answer.append(abs(calc(express_list[0],num_list[0],num_list[1])))
else:
continue
num_list = list(map(int, re.split("[+*-]+", expression)))
express_list = [i for i in expression if i in '*-+']
return max(answer)
![image](https://user-images.githubusercontent.com/45617225/104893480-d48f1980-59b6-11eb-99b5-d27164363a9d.png)
- 뭐 대충 이런식으로 출력..
![image](https://user-images.githubusercontent.com/45617225/104893188-719d8280-59b6-11eb-8197-cc9a458cbdc6.png)
- 결과는 참혹했다............
- 이건 다른 사람들 코드 안보고 나중에 한번 다시 도전해봐야겠다.
- 일단 어떻게든 결과만 나오게 하자는 생각으로 했는데, remove해주는 식으로 원소 제거해가고, 마지막에 다시 리스트를 생성했기 때문에 당연히 연산이 모든 경우의 수 만큼 반복된다. **(즉, 정말 비효율적인 코드라는 것..)**
문제 설명
"100-200*300-500+20"
참가자에게 주어진 연산 수식이 담긴 문자열 expression이 매개변수로 주어질 때, 우승 시 받을 수 있는 가장 큰 상금 금액을 return 하도록 solution 함수를 완성해주세요.
[제한사항]
입출력 예
입출력 예 #1
* > + > -
로 연산자 우선순위를 정했을 때, 가장 큰 절댓값을 얻을 수 있습니다.입출력 예 #2