728x90
반응형
목차
문제
https://school.programmers.co.kr/learn/courses/30/lessons/67257
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 구현 방향
최대한 분리해서 풀었다.
1. 수식 계산 함수
2. 등호 순위에 대한 모든 조합 함수
3. 순위에 대해 수식 계산해주는 함수
4. 수식을 부호와 수로 쪼개주는 함수
코드 구현
// 수식 계산 함수
function caculate(a, b, express) {
switch (express) {
case "*":
return a * b;
case "+":
return a + b;
case "-":
return a - b;
}
}
// 분리를 위한 플래그 함수
function flag(str) {
return str === "-" || str === "*" || str === "+";
}
//수식과 수를 분리해서 배열에 넣어주는 함수
function seperate(str, express, num) {
let word = "";
for (let i = 0; i < str.length; i++) {
if (flag(str[i])) {
express.push(str[i]);
num.push(Number(word));
word = "";
} else word += str[i];
}
num.push(Number(word));
}
//수식에 대해 모든 조합을 구해주는 함수
function order(express) {
let comb = [];
if (express.length === 3) {
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
for (let p = 0; p < 3; p++) {
if (i !== j && j !== p && i !== p)
comb.push([express[i], express[j], express[p]]);
}
}
}
} else if (express.length == 2) {
for (let i = 0; i < 2; i++) {
for (let j = 0; j < 2; j++) {
if (i !== j) comb.push([express[i], express[j]]);
}
}
} else {
comb.push([express[0]]);
}
return comb;
}
//수식 우선순위에 따라 수를 계산하는 함수
function orderCacul(express, num, order) {
let idx = 0;
while (num.length > 1) {
if (idx >= order.length) break;
let i = 0;
while (true) {
if (i >= express.length) break;
if (express[i] === order[idx]) {
let calNum = caculate(num[i], num[i + 1], order[idx]);
express.splice(i, 1);
num.splice(i, 1);
num[i] = calNum;
i = 0;
} else {
i++;
}
}
idx++;
}
return Math.abs(num[0]);
}
function solution(expression) {
var answer = 0;
let express = [];
let num = [];
let ans = [];
seperate(expression, express, num);
let s = new Set();
express.forEach((item) => s.add(item));
let dic = [...s];
let comb = order(dic);
for (let cb of comb) {
ans.push(orderCacul([...express], [...num], cb));
}
answer = Math.max(...ans);
return answer;
}
반응형
'PS > 프로그래머스' 카테고리의 다른 글
| [프로그래머스][조합] 메뉴리뉴얼 (1) | 2025.10.24 |
|---|---|
| [프로그래머스][분할정복] 표현 가능한 이진트리 (0) | 2025.10.22 |
| [프로그래머스][수학] 점찍기, 두 원 사이의 정수의 쌍 (0) | 2025.10.12 |
| [프로그래머스][그리디] 디펜스 게임 (0) | 2025.10.10 |
| [프로그래머스][bfs] 거리두기 확인하기 (0) | 2025.10.07 |