https://programmers.co.kr/learn/courses/30/lessons/67257
정규식과 eval사용, 잘못 삽질하면 오래걸리는 문제
입출력 예
"100-200*300-500+20" =====>>> 60420
예시 설명
* > + > - 로 연산자 우선순위를 정했을 때, 가장 큰 절댓값을 얻을 수 있습니다.
연산 순서는 아래와 같습니다.
100-200300-500+20
= 100-(200300)-500+20
= 100-60000-(500+20)
= (100-60000)-520
= (-59900-520)
= -60420
따라서, 우승 시 받을 수 있는 상금은 |-60420| = 60420 입니다.
코드
# 파이썬
from itertools import permutations
import re
def solution(expression):
expressions = set(re.findall("\D", expression))
prior = permutations(expressions)
cand = []
for op_cand in prior:
temp = re.compile("(\D)").split('' + expression)
for exp in op_cand:
while exp in temp:
idx = temp.index(exp)
temp = temp[:idx-1] + [str(eval(''.join(temp[idx-1:idx+2])))] + temp[idx+2:]
cand.append(abs(int(temp[0])))
return max(cand)
// 자바스크립트
function solution(expression) {
const prior = [
['-', '*', '+'],
['-', '+', '*'],
['*', '-', '+'],
['*', '+', '-'],
['+', '-', '*'],
['+', '*', '-']
]
let cand = []
for (let opCand of prior) {
const temp = expression.split(/(\D)/)
for (let exp of opCand) {
while (temp.includes(exp)) {
const idx = temp.indexOf(exp)
temp.splice(idx - 1, 3, eval(temp.slice(idx - 1, idx + 2).join('')))
}
}
cand.push(Math.abs(temp[0]))
}
return Math.max(...cand)
}
언니... 다른 풀이보다가 언니꺼 봤는데 엄청 짧다 ㅠㅠ대박쓰 덕분에 정규 표현식 공부중..❤