🔥문제링크
https://school.programmers.co.kr/learn/courses/30/lessons/67257
🔥풀이
1. 일단 주어진 수식(expression)을 연산자와 피연산자를 구분하여 배열로 나눴다
-> [500, '-', 300 , '+', 200]
2. 이런식으로 나눈 다음 최대로 나올수있는 연산순위 6가지를 모두 구함
-> 하단 op_order_arr 참고
3. 연산자 순위로 나올수 있는 6가지를 모두 돌려가며 최댓값을 계속 갱신
-> op_order_arr.forEach((op_arr)=> { ... }) // 해당 연산 참고
function solution(expression) {
let max = 0
let value = ''
let origin=[]
for(let i=0; i<=expression.length-1; ++i){
let cha = expression[i]
if(cha==='-'||cha==='+'||cha==='*'){
origin.push(Number(value))
value=''
origin.push(cha)
}else if(i===expression.length-1){
value+=cha
origin.push(Number(value))
}else{
value+=cha
}
}
const op_order_arr =
[['*','+','-'],
['*','-','+'],
['+','*','-'],
['+','-','*'],
['-','*','+'],
['-','+','*']]
op_order_arr.forEach((op_arr)=>{
let arr = [...origin]
op_arr.forEach((op)=>{
let i =0
while(i<=arr.length-1){
if(arr[i+1] && arr[i+1]===op){
let cha = arr[i+1]
let replaced_val = undefined
if(cha==='+'){
replaced_val = arr[i]+arr[i+2]
}else if(cha==='-'){
replaced_val = arr[i]-arr[i+2]
}else if(cha==='*'){
replaced_val = arr[i]*arr[i+2]
}
arr.splice(i,3,replaced_val)
}else{
++i
}
}
})
max=Math.max(max,Math.abs(arr[0]))
})
return max;
}
🔥후기
처음에 모든 경우의 수를 반복하여 돌리는게 시간초과 될 줄알고 반신반의 하며 시도해봤는데 다행히 시간에 걸리지는 않았다. 그 보다 첫번째 수식문자열(expression)을 연산자, 피연산자 구분하여 배열로 만들때 마지막 문자를 빼고 배열로 만들어서 한참 고생했다. 역시 알고리즘 문제를 풀 때는 각잡고 집중해서 푸는게 좋은 것 같다.🙄🙄
'알고리즘' 카테고리의 다른 글
프로그래머스[JS] > 순위 (0) | 2024.08.15 |
---|---|
프로그래머스[JS] > 무인도 여행 (0) | 2024.08.11 |
프로그래머스[JS] > [3차] n진수 게임 (0) | 2024.08.05 |
프로그래머스[JS] > 정수 삼각형 (0) | 2024.08.04 |
프로그래머스[JS] > 겹치는 선분의 길이 (0) | 2024.07.20 |