https://www.acmicpc.net/problem/1541
이 문제는 그리디
문제이다.
+와 -로 구성된 식에서 괄호를 만들어 최소값을 만드는 문제이다.
최소값으로 만드려면 +로 이어진 숫자들을 더한 다음 -로 빼면 된다.
예를 들어 55-50+40 이라면
+로 연결된 50과 40을 먼저 더해서 90을 만들고
55에서 90을 빼면 된다.
위와같이 풀이한다.
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString().trim()
: `10+20+30+40`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const expression = input().split("-");
const minusResult = [];
for (const item of expression) {
const plusAccumulation = item
.split("+")
.map(Number)
.reduce((accumulation, current) => accumulation + current);
minusResult.push(plusAccumulation);
}
console.log(
minusResult.reduce((accumulation, current) => accumulation - current)
);
오늘 문제는 금방 풀었다. reduce를 사용하여 쉽게 풀 수 있었다. 점점 갈수록 함수형 프로그래밍에 익숙해지는 것 같다. 화이팅!