세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
첫째 줄에 정답을 출력한다.
55-50+40
-35
10+20+30+40
100
00009-00009
0
💡 문제풀이 과정
1-2-3+4
output: -8
[’1’, ‘2’, ‘3+4’]
[1, 2, 7]
답안 1번
: 마지막으로 배열의 첫 번째 값에 2를 곱한 값에 배열의 합계를 빼준다. ⇒ (2 * 1) - (1 + 2 + 7) = -8
답안 2번
: answer 변수를 선언 후, 배열에서 반복문을 돌면서 인덱스 0이면 answer += n, 나머지는 answer -= n; 해주는 방법도 있다.✅ 답안 #1
const filePath = process.platform == 'linux' ? '/dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString();
const nums = input.split('-').map((s) => s.split('+').reduce((a, b) => a + +b, 0));
console.log(2 * nums[0] - nums.reduce((a, b) => a + b));
✅ 답안 #2
const filePath = process.platform == 'linux' ? '/dev/stdin' : './input.txt';
const input = require('fs').readFileSync(filePath).toString();
const nums = input.split('-').map((s) => s.split('+').reduce((a, b) => a + +b, 0));
let answer = 0;
nums.forEach((n, i) => (i == 0 ? answer += n : answer -= n));
console.log(answer);