해당 포스팅은 백준 1541번 잃어버린 괄호 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였다.
주어진 식에 괄호를 적절히 쳐 값을 최소로 만들자.
첫째 줄에 정답을 출력한다.
값이 최솟값이 되려면 최대한 큰 수를 빼야한다.
그러기 위해서는 -
가 나올 때 그 다음 -
가 나올 때까지 괄호를 쳐야한다.
예시로 50-20+30+50-100+10
의 최솟값을 생각해보자.
해당 식은 50 - (20+30+50) - (100+10) = -160
이 최소이다. 즉 -
가 나오면 그 다음 -
가 나올 때(그 사이의 연산은 전부 +
이다)까지 괄호를 쳐주어야 한다.
-
를 기준으로 나눈 후 배열로 담아준다.ex: 20+30+50
, +
를 기준으로 나눈 후, map을 통해 원소들을 더해준다.const input = require('fs').readFileSync('/dev/stdin').toString();
const sumBracket = input.split("-").map(el => {
return el.split("+").reduce((prev, curr) => Number(prev) + Number(curr), 0);
});
if (sumBracket.length === 1) {
console.log(sumBracket[0])
} else {
let result = sumBracket[0];
for(let i = 1; i < sumBracket.length; i++) {
result -= sumBracket[i];
}
console.log(result);
}