반응형
문제
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];
}
'Coding Problem' 카테고리의 다른 글
[프로그래머스] 카카오 - 길 찾기 게임 (0) | 2025.02.03 |
---|---|
[프로그래머스] 카카오 - 경주로 건설 (0) | 2025.02.02 |
[프로그래머스] 카카오 - 이모티콘 할인행사 (0) | 2025.01.31 |
[프로그래머스] 카카오 - 파괴되지 않은 건물 (0) | 2025.01.30 |
[프로그래머스] 당구 연습 (0) | 2025.01.28 |