[プログラマ]式の最大化-JavaScript
プログラマレベル2-式の最大化
📌 問題の説明
📌 思考の解き方(初めての試み->失敗)
📌 に答える
function solution(expression) {
let answer = 0;
let expressions = [];
let numbers = [];
let expressionLoc = 0;
// 숫자와 수식을 분리하여 numbers와 expressions에 각각 저장한다.
for (let i = 0; i < expression.length; i++) {
if (
expression[i] === "+" ||
expression[i] === "-" ||
expression[i] === "*"
) {
expressions.push(expression[i]);
numbers.push(expression.slice(expressionLoc, i));
expressionLoc = i + 1;
}
}
numbers.push(expression.slice(expressionLoc, expression.length));
numbers = numbers.map((number) => +number);
let expressionCount = new Set([...expressions]).size;
// 나온 수식의 갯수만큼 반복문을 반복
for (let i = 0; i < expressionCount; i++) {
let array = [...numbers];
let expressionArr = [...expressions];
for (let j = 0; j < 3; j++) {
let current = j + i;
if (current > 2) {
current -= 3;
}
// current값이 0이면 +, 1이면 -, 2이면 *로 계산을 진행한다.
switch (current) {
case 0:
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "+") {
let sum = array[k] + array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
case 1:
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "-") {
let sum = array[k] - array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
case 2:
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "*") {
let sum = array[k] * array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
}
}
// 절대값이 최대인 값을 반환
answer = Math.max(answer, Math.abs(...array));
}
return answer;
}
📌 考え方の解き方(2回目の試み->成功)
📌 に答える
function solution(expression) {
let answer = 0;
let numbers = [];
let expressions = [];
let expressionLoc = 0;
// 나올수 있는 6가지 경우의 수를 선언한다.
const equations = [
["+", "-", "*"],
["+", "*", "-"],
["-", "+", "*"],
["-", "*", "+"],
["*", "+", "-"],
["*", "-", "+"],
];
// 숫자와 수식을 분리하여 numbers와 expressions에 각각 저장한다.
for (let i = 0; i < expression.length; i++) {
if (
expression[i] === "+" ||
expression[i] === "-" ||
expression[i] === "*"
) {
expressions.push(expression[i]);
numbers.push(expression.slice(expressionLoc, i));
expressionLoc = i + 1;
}
}
numbers.push(expression.slice(expressionLoc, expression.length));
numbers = numbers.map((number) => +number);
let expressionCount = new Set([...expressions]).size;
// 우선순위에 맞게 6가지의 연산을 한다.
for (let i = 0; i < equations.length; i++) {
let array = [...numbers];
let expressionArr = [...expressions];
let current = equations[i];
for (let j = 0; j < expressionCount; j++) {
let currentEquation = current[j];
switch (currentEquation) {
case "+":
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "+") {
let sum = array[k] + array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
case "-":
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "-") {
let sum = array[k] - array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
case "*":
for (let k = 0; k < expressionArr.length; k++) {
if (expressionArr[k] === "*") {
let sum = array[k] * array[k + 1];
array.splice(k, 2, sum);
expressionArr.splice(k, 1);
k--;
}
}
break;
}
}
// 절대값이 최대인 값을 반환한다.
answer = Math.max(answer, Math.abs(...array));
}
return answer;
}
Reference
この問題について([プログラマ]式の最大化-JavaScript), 我々は、より多くの情報をここで見つけました https://velog.io/@tnehd1998/프로그래머스-수식-최대화-JavaScriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol