본문 바로가기

알고리즘

[카카오 인턴]>수식 최대화

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/67257

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(expression) {
  let answer=Number.MIN_SAFE_INTEGER
  let operators = [
    ["+", "-", "*"],
    ["+", "*", "-"],
    ["-", "+", "*"],
    ["-", "*", "+"],
    ["*", "+", "-"],
    ["*", "-", "+"],
  ];
  let arr = [];
  let temp = "";
  for (let i = 0; i < expression.length; i++) {
    if (
      expression[i] === "+" ||
      expression[i] === "-" ||
      expression[i] === "*"
    ) {
      arr.push(temp);
      arr.push(expression[i]);
      temp = "";
    } else if (i === expression.length - 1) {
      temp += "" + expression[i];
      arr.push(temp);
    } else {
      temp += expression[i];
    }
  }

  for(let i=0;i<operators.length;i++){
    calculate(operators[i])
  }

  function calculate(operatorArr) {
    let slicedArr=arr.slice()
    operatorArr.forEach((operator) => {
      execute(operator,slicedArr);
    });
    answer=Math.max(Math.abs(slicedArr),answer)
  }

  function execute(operator,slicedArr) {
    if (operator === "+") {
      for (let i = 0; i < arr.length; i++) {
        if (slicedArr[i] === "+") {
          let v1 = slicedArr[i - 1];
          let v2 = slicedArr[i + 1];
          slicedArr.splice(i - 1, 2);
          slicedArr[i - 1] = Number(v1) + Number(v2);
          i = i - 2;
        }
      }
    } else if (operator === "-") {
      for (let i = 0; i < arr.length; i++) {
        if (slicedArr[i] === "-") {
          let v1 = slicedArr[i - 1];
          let v2 = slicedArr[i + 1];
          slicedArr.splice(i - 1, 2);
          slicedArr[i - 1] = Number(v1) - Number(v2);
          i = i - 2;
        }
      }
    } else if (operator === "*") {
      for (let i = 0; i < arr.length; i++) {
        if (slicedArr[i] === "*") {
          let v1 = slicedArr[i - 1];
          let v2 = slicedArr[i + 1];
          slicedArr.splice(i - 1, 2);
          slicedArr[i - 1] = Number(v1) * Number(v2);
          i = i - 2;
        }
      }
    }
    return slicedArr
  }

  return answer;
}
728x90