# [일일코딩] 잃어버린 괄호
# 문제
https://www.acmicpc.net/problem/1541
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
# 입출력 예
55-50+40
-35
# 내 풀이
require("readline")
.createInterface(process.stdin, process.stdout)
.on("line", (line) => {
sol(line);
})
.on("close", () => {
process.exit();
});
function sol(line) {
var sum = line
.split("-") // - 연산자 기준으로 나누고 배열을 새로 생성
.map((str) =>
str
.split("+") // + 연산자 기준으로 한번 더 나누고 배열을 새로 생성
.map(Number) //생성된 배열을 숫자로 변환
.reduce((a, b) => a + b, 0)
); // 값 누적
//배열의 첫 요소 * 2 하고 모든 요소 더한 후 뺀다
//reduce에 첫 요소가 포함되기에 *2를 함
var result = sum[0] * 2 - sum.reduce((a, b) => a + b, 0);
console.log(result);
}
[풀이] 식이 0~9까지의 숫자와 +, - 를 조합한 문자열로 주어진다. 값을 최소로 만들기 위해 적절하게 괄호를 추가해야하는데 여기서 괄호는 실행의 우선순위를 의미한다. 값이 최소가 되는 방법은 + 연산자를 먼저 처리하고 - 연산자를 처리하면 한다.
- split을 이용해서 - 연산자를 기준으로 나눈다.
- 나뉜 배열을 + 연산자 기준으로 나눈 후 더한다
- 그리고 - 연산자를 계산한다