Coding Problem

[프로그래머스] 카카오 - 수식 최대화

Yepchani 2025. 2. 1. 14:00
반응형

문제

2020 카카오 인턴십 - 수식 최대화

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

 

 

 

풀이

설명

우승 시 받을 수 있는 가장 큰 상금 금액을 구하는 문제입니다.

 

가능한 모든 조합을 구해 계산하면 됩니다.

 

정규식을 이용하면 수식을 토큰으로 쉽게 분리할 수 있습니다.

 

주의할 점은 금액이 음수가 나올 경우 절댓값을 취해줘야 합니다.

 

예시 코드

function solution(expression) {
  const operators = ["+", "-", "*"];
  const operatorPermutations = getPermutations(operators);
  let maxResult = 0;

  for (const order of operatorPermutations) {
    const result = calculateExpression(expression, order);
    maxResult = Math.max(maxResult, Math.abs(result));
  }

  return maxResult;
}

function calculateExpression(expression, order) {
  let tokens = expression
    .match(/\d+|[+\-*]/g)
    .map((token) => (isNaN(token) ? token : Number(token)));

  for (const op of order) {
    const newTokens = [];
    let i = 0;

    while (i < tokens.length) {
      if (tokens[i] === op) {
        const num1 = newTokens.pop();
        const num2 = tokens[i + 1];
        let result = 0;

        if (op === "+") result = num1 + num2;
        else if (op === "-") result = num1 - num2;
        else if (op === "*") result = num1 * num2;

        newTokens.push(result);
        i += 2;
      } else {
        newTokens.push(tokens[i]);
        i++;
      }
    }

    tokens = newTokens;
  }

  return tokens[0];
}