728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/67257
문제 풀이 방법
이 문제를 처음 봤을 때는 DFS를 이용해 풀어볼까 했지만, 반복문을 이용한 구현으로 푸는 것이 좋을 것 같아 구현으로 풀어봤다.
연산자 조합은 총 6개가 되며 expression은 숫자와 연산자들 끼리만 구분해 주고 연산자 우선순위 대로 expression에서 분리된 연산자를 순회하며 해당 인덱스에서 계산되어질 숫자들을 계산후 다시 숫자 배열에 할당해준다.
이렇게 마지막에 남은 숫자는 계산을 끝까지 마친 결과이며 이후 answer과 크기를 비교한 뒤 결과를 반환한다.
완성된 코드
const solution = (expression) => {
let answer = -Infinity;
const combinations = [
['+', '-', '*'],
['+', '*', '-'],
['-', '+', '*'],
['-', '*', '+'],
['*', '-', '+'],
['*', '+', '-'],
]
const calc = (a, b, operator) => {
if(operator === '+') {
return a + b;
}
else if(operator === '-') {
return a - b;
}
else if(operator === '*') {
return a * b;
}
}
combinations.forEach(com => {
let st = expression.split(/[-+*]/).map(Number);
let operator = expression.match(/[-+*]/g);
com.forEach(oper => {
let idx = operator.indexOf(oper);
while(idx !== -1){
st.splice(idx, 2, calc(st[idx], st[idx+1], oper));
operator.splice(idx, 1);
idx = operator.indexOf(oper);
}
});
answer = Math.max(answer, Math.abs(st[0]));
});
return answer;
}
728x90
'코딩 테스트 > 프로그래머스 코딩 테스트 연습' 카테고리의 다른 글
[JS] 2Level / 연습문제 / 줄 서는 방법 (0) | 2023.11.04 |
---|---|
[JS] 2Level / 연습문제 / 마법의 엘리베이터 (0) | 2023.11.02 |
[JS] 2Level / 완전탐색 / 전력망을 둘로 나누기 (0) | 2023.10.30 |
[JS] 1Level / 해시 / 폰켓몬 (0) | 2023.10.27 |
[JS] 1Level / 연습문제 / 카드 뭉치 (0) | 2023.10.27 |