반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/67257
2. 코드
이 문제를 처음 풀었을 때는 문제를 착각해 연산자 별 우선순위가 정해지면 우선순위가 높은 연산자 순으로 계산되어야하는 걸 잊고, 그냥 어떤 순서대로 계산해야 최댓값이 나오는지만 DFS를 사용해 구해주었다.
문제를 정확히 파악해야 한다. 한 번 우선순위를 정하면 그 우선순위 순서대로 계산이 되어야 한다.
구글링하여 잘 설명이 되어있는 블로그를 읽고 이해했다.
function solution(expression) {
const prior = [
['-', '*', '+'],
['-', '+', '*'],
['*', '-', '+'],
['*', '+', '-'],
['+', '-', '*'],
['+', '*', '-']
];
let answer = [];
for (let arr of prior) {
const temp = expression.split(/(\D)/);
for (let exp of arr) {
while (temp.includes(exp)) {
const idx = temp.indexOf(exp)
temp.splice(idx - 1, 3, eval(temp.slice(idx - 1, idx + 2).join('')));
}
}
answer.push(Math.abs(temp[0]));
}
return Math.max(...answer);
}
기억해야 할 점이 두 가지가 있다.
첫째로, 입력된 식을 ['100', '-', '200', '*', '300', '-', '500', '+', '20']과 같이 배열의 형태로 담아두기 위해 아래와 같은 정규표현식을 사용한다.
// \D는 숫자가 아니라는 것을 뜻한다. 즉 숫자가 아닌 것 기준으로 split한다.
const temp = expression.split(/(\D)/);
두번째로, eval은 문자로 표현된 JavaScript 코드를 실행하는 함수이다.
temp.splice(idx - 1, 3, eval(temp.slice(idx - 1, idx + 2).join('')));
idx-1부터 idx-2까지의 요소를 join을 통해 하나의 문자열로 만들어준 후 그 계산값을 splice를 통해 원하는 자리에 넣어준다.
이해에 참고한 블로그)
이번 문제는 정규표현식을 모르면 그냥 막혔을 것 같은 문제다 ㅋㅋㅋㅋㅋㅋㅋㅋ왤케 어렵냐..이게 레벨2인거 실화냐~~!! 코드는 짧지만 문제를 푸는 방식을 생각하는 것 자체가 어렵다고ㅠㅠ
복기
7/4
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[구현] 프로그래머스 '줄 서는 방법' - js (0) | 2023.05.18 |
---|---|
[구현] 프로그래머스 '행렬 테두리 회전하기' - js (0) | 2023.05.16 |
[구현] 프로그래머스 '방금그곡' - js (1) | 2023.05.13 |
[투포인터] 프로그래머스 '연속된 부분 수열의 합' - js (0) | 2023.05.10 |
[투포인터] 프로그래머스 '보석 쇼핑' - js (1) | 2023.05.09 |