문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
문제의 포인트
1. -와+로 나누어야 함
2. 어떻게 최소값으로 만들까
> 최소로 만들기 위해서 - 부호 뒤 숫자를 최대한 크게 만들어야 함(그럼 +를 이용해 다 더해야 함)
때문에
1. 맨 처음 split을 -로 하고 그 담에 +를 함
2. +인 요소 배열을 더함
3. input[0] 에서 모두 뺌
식 | 55 | - | 50 | + | 40 | 결과 |
split | [ 55 ] | [ 50, 40 ] = [ 90 ] | -35 |
코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("-").map(x => x.split("+").map(Number));
let result = 0;
for (let i = 0; i < input.length; i++) {
let val = input[i].reduce((a, b) => a + b, 0);
if (i == 0) result = val;
else result += -val;
}
console.log(result)
'백준' 카테고리의 다른 글
[실버] 영화감독 숌_1436번 (0) | 2023.06.17 |
---|---|
[실버] 2×n 타일링 2 (11727번)_JS (0) | 2022.12.24 |
[실버] 구간 합 구하기 4 (11659번)_JS (1) | 2022.12.24 |
[실버] 파도반 수열 (9461번)_JS (0) | 2022.12.23 |
[실버] 패션왕 신해빈 (9375번)_JS (0) | 2022.12.23 |