Level 2️⃣ - 수식 최대화
2024. 4. 24. 19:46ㆍ알고리즘/프로그래머스
https://school.programmers.co.kr/learn/courses/30/lessons/67257
🚀문제 접근
우선순위의 경우의 수는 부호가 총 3가지이므로 6가지이다.
만약 우선 순위가 - > + > * 라면 - 연산부터 모두 하고, 그 다음에 + 연산, 그 다음에 * 연산을 이어서 해주면 된다.
그림으로 표현하면 다음과 같다.
그렇다면 입력값으로 주어지는 "100-200*300-500+20" 이라는 문자열을 부호기호와 숫자를 분리해야한다.
[100, -, 200, *, 300, -, 500, +, 20]
그리고 우선순위에 맞게 먼저 계산을 해주면 된다. 어떻게 구현할 수 있을까?
- 부터 계산을 해야한다면 - 를 기준으로 양 옆의 숫자를 - 와 함께 제거한 후, - 계산을 완료한 값을 다시 넣어주면 된다.
코드를 보면 이해가 쉬울 것이다.
🛠코드
function solution(expression) {
let ret = [];
const priorities = [
['-', '+', '*'],
['-', '*', '+'],
['+', '-', '*'],
['+', '*', '-'],
['*', '+', '-'],
['*', '-', '+'],
];
for(const priority of priorities){
const temp = format(expression);
for(const elem of priority){
while(temp.includes(elem)){
const idx = temp.indexOf(elem);
temp.splice(idx-1, 3, eval(temp.slice(idx-1, idx+2).join("")));
}
}
ret.push(Math.abs(temp[0]));
}
return Math.max(...ret);
}
function format(str){
let ret = [];
let temp = "";
for(let i = 0; i<str.length; i++){
if(!Number.isNaN(Number(str[i]))) temp += str[i];
else {
ret.push(temp);
ret.push(str[i]);
temp = "";
}
}
ret.push(temp);
return ret;
}
'알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2️⃣ - 캐시 (2018 KAKAO BLIND RECRUITMENT) (0) | 2024.05.16 |
---|---|
Level 2️⃣ - 리코쳇 로봇 (0) | 2024.04.25 |
Level 2️⃣ - 숫자카드 나누기 (0) | 2024.04.23 |
Level 2️⃣ - 방금그곡 (1) | 2024.04.23 |
Level 2️⃣ - 전력망을 둘로 나누기 (0) | 2024.04.11 |