[프로그래머스] 수식 최대화 (파이썬, 순열, javascript)
728x90
반응형
1. javascript
function solution(expression) {
const prior=[['+','-','*'],['+','*','-'],['*','-','+'],['*','+','-'],
['-','+','*'],['-','*','+']]; // 순열로 돌려도 되고 최대 6가지
const nums=[];
const opers=[];
let num='';
expression.split("").map((x)=>{
if(x>='0' && x<='9'){//숫자 계산
num+=x;
}else{
nums.push(+num);//기호를 만나면 지금까지 계산한 숫자를 숫자배열에 넣어준다.
num='';
opers.push(x);
}
})
nums.push(+num);
var answer = 0;
for(let i=0;i<prior.length;i++){
const cnums=[...nums];//각 배열 복사
const copers=[...opers];
for(let j=0;j<prior[i].length;j++){
let curOper=prior[i][j];//현재 기호
for(let k=0;k<copers.length;k++){ // 한 문장안에 같은 기호가 있으면 그 수 먼저 계산
if(curOper==copers[k]){
if(curOper==='+'){
cnums[k]=cnums[k]+cnums[k+1];//계산된 것을 넣고
cnums.splice(k+1,1);//숫자하나는 줄어듬
copers.splice(k,1);//연산자도 줄어듬
k-=1;//삭제되어 1감소시킨다.
}else if(curOper==='-'){
cnums[k]=cnums[k]-cnums[k+1];
cnums.splice(k+1,1);
copers.splice(k,1);
k-=1;
}else if(curOper==='*'){
cnums[k]=cnums[k]*cnums[k+1];
cnums.splice(k+1,1);
copers.splice(k,1);
k-=1;
}
}
}
// console.log(cnums,copers)
}
answer=Math.max(answer,Math.abs(cnums[0]));
}
return answer;
}
2. 파이썬 풀이
from itertools import permutations
def solution(express):
answer = 0
temp=[]
num=0
for i in range(len(express)):
if express[i].isnumeric():
num=num*10+int(express[i])
else:
temp.append(num)
temp.append(express[i])
num=0
temp.append(num)
for cur in permutations(['+','-','*']): # 6가지
flag=False
temp2=temp[::] #deepcopy
for c in cur: # 3개
i=1
while len(temp2)>1 and i<len(temp2): # 두번째 조건: 현재 연산자의 계산이 모두 끝나면
if temp2[i]==c:
if c=='+':
temp2[i]=temp2[i-1]+temp2[i+1]
elif c=='-':
temp2[i]=temp2[i-1]-temp2[i+1]
else:
temp2[i]=temp2[i-1]*temp2[i+1]
temp2=temp2[:i-1]+[temp2[i]]+temp2[i+2:]
if len(temp2)==1:
# print(temp2[0])
answer=max(answer,abs(temp2[0]))
flag=True
break
else:
i+=1
if flag:
break
return answer
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 (python, javascript) (0) | 2020.12.12 |
---|---|
[프로그래머스] n진수 게임 (파이썬, 진법변환) (0) | 2020.09.24 |
[프로그래머스] 등굣길 (dp,파이썬) (0) | 2020.09.23 |
[프로그래머스] 거스름돈 (파이썬, javascript) (0) | 2020.09.23 |
[프로그래머스] 2xn 타일링 (파이썬, dp) (0) | 2020.09.23 |
TAGS.