프로그래머스 - 수식 최대화
연산자 우선 순위를 재정의해서 계산할 수 있는 가장 큰 값을 리턴하면 되는 문제이다.
자세한 문제 설명은 아래 링크로!
https://programmers.co.kr/learn/courses/30/lessons/67257
풀이
*,-,+로 만들 수 있는 우선순위는 6개이므로 경우의 수를 따로 구하지 않고 테이블을 만들어준다.
- 우선순위 경우의 수 최대 6개 -> look-up table로 만들었다.
- 우선순위 배열을 순회하면서 우선순위에 맞는 연산을 실행한 값을 result 배열에 넣는다.
- 어떻게?
- expression 배열을 숫자와 연산자로 나눈다.
- 순위 배열의 요소도 배열이니깐 또 순회하면서
- expression배열에서 연산자가 위치한 인덱스를 구해주고
- 해당 인덱스를 기준으로 이전 값과 다음 값을 계산한다.
- 업데이트 된 값을 다시 넣어줌
function solution(expression) {
let result = []
let table = [
['+', '-', '*'],
['+', '*', '-'],
['-', '+', '*'],
['-', '*', '+'],
['*', '+', '-'],
['*', '-', '+']
]
//계산 함수
const cal = (num1, num2, op) => {
if(op === '+') return Number(num1) + Number(num2)
if(op === '-') return Number(num1) - Number(num2)
if(op === '*') return Number(num1) * Number(num2)
}
table.forEach(arr => { //['+', '-', '*']
let nums = expression.split(/([-*+])/g)
//["100", "-", "200", "*", "300", "-", "500", "+", "20"]
arr.forEach(oper => { //'+'
//연산자일 때만
while(nums.includes(oper)) {
let idx = nums.indexOf(oper)
//계산된 값으로 교체
nums.splice(idx-1, 3, cal(nums[idx-1], nums[idx+1], oper))
}
})
result.push(Math.abs(nums[0]))
})
return Math.max(...result)
}
Author And Source
이 문제에 관하여(프로그래머스 - 수식 최대화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@bining/프로그래머스-수식-최대화저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)