[プログラマ#JS]最大化式
2839 ワード
[リンク]
https://programmers.co.kr/learn/courses/30/lessons/67257
[回答]
[コード]
const prioritys = [{'+':0, '-':1, '*':2}
,{'+':2, '-':0, '*':1}
,{'+':1, '-':2, '*':0}
,{'+':0, '-':2, '*':1}
,{'+':1, '-':0, '*':2}
,{'+':2, '-':1, '*':0}];
function solution(expression) {
let answer = 0;
for(const priority of prioritys) {
let postfix = [''];
const stack = new Array();
/* 중위표기법 -> 후위표기법 변환 */
for(let i = 0; i < expression.length; i++) {
if(expression[i] == '+' || expression[i] == '-' || expression[i] == '*') {
while(stack.length) {
let top = stack.pop();
if(priority[expression[i]] <= priority[top]) {
postfix.push(top);
} else {
stack.push(top);
break;
}
}
stack.push(expression[i]);
postfix.push('');
} else {
let temp = postfix.pop();
postfix.push(temp + expression[i]);
}
}
while(stack.length) {
postfix.push(stack.pop());
}
/* 후위표기법 연산 */
for(let i = 0; i < postfix.length; i++) {
if(postfix[i] == '+') {
stack.push(stack.pop() + stack.pop());
} else if(postfix[i] == '-') {
let b = stack.pop();
let a = stack.pop();
stack.push(a - b);
} else if(postfix[i] == '*') {
stack.push(stack.pop() * stack.pop());
} else {
stack.push(parseInt(postfix[i]));
}
}
answer = Math.max(answer, Math.abs(stack.pop()));
}
return answer;
}
Reference
この問題について([プログラマ#JS]最大化式), 我々は、より多くの情報をここで見つけました https://velog.io/@jesahan/프로그래머스JS-수식-최대화テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol