문제
코드
function sol(input) {
const numbers = input.split("-").map((str) =>
str.split("+")
.map(Number)
.reduce((s, v) => s + v, 0)
);
let answer = 2 * numbers[0] - numbers.reduce((s, v) => s + v, 0);
return answer;
}
require("readline")
.createInterface(process.stdin, process.stdout)
.on("line", (line) => {
console.log(sol(line));
})
.on("close", () => {
process.exit();
});
풀이
식이 0~9까지의 숫자와 +, - 를 조합한 문자열로 주어진다.
이 식의 값을 최소로 만들기 위한 적절한 괄호를 추가해야 하는데,
괄호는 실행의 우선순위를 의미한다.
값이 최소가 되는 방법으로 모든 + 연산자를 처리하고, 다음으로 - 연산자를 처리하면 된다.
그래서 주어진 문자열에서 "-" 연산자를 기준으로 문자열을 나눴고,
나눈 문자열은 "1", "1+2", "1+2+3" 등 숫자와 "+"만 포함된다.
그리고 나눠진 문자열에서 "+" 연산자를 기준으로 피연산자를 구해서 모두 더한 값을 배열에 차례대로 넣어준다.
이제 배열에 남은 숫자들을 각각 "-" 연산을 수행하면 된다.
A-B-C-D ... 등과 같이 첫 숫자에서 다른 모든 숫자를 빼주면 최솟값을 구할 수 있다.
주석을 포함한 코드
function sol(input) {
const numbers = input.split("-").map((str) => // -를 기준으로 분리해서 분리한 문자열을 모두 탐색
str.split("+")
.map(Number)
.reduce((s, v) => s + v, 0) // +를 기준으로 나눠서 모두 더해준다.
); // -를 기준으로 분리된 문자열의 갯수만큼 numbers 배열의 원소 개수가 된다.
let answer = numbers[0] * 2 - numbers.reduce((s, v) => s + v, 0); // 첫번째 원소에서 나머지 모든 원소를 빼준다.
return answer;
}
require("readline")
.createInterface(process.stdin, process.stdout)
.on("line", (line) => {
console.log(sol(line));
})
.on("close", () => {
process.exit();
});
'DS & Algorithm > baekjoon' 카테고리의 다른 글
[백준] 17406번 배열 돌리기 4 - 자바스크립트 (0) | 2022.04.15 |
---|---|
[백준] 13460번 구슬 탈출 2 - 자바스크립트 (0) | 2022.03.25 |
[백준] 2108번 통계학 - JavaScript(NodeJS) (0) | 2021.07.18 |
[백준] 2231번 분해합 - JavaScript(NodeJS) (0) | 2021.07.16 |
[백준] 3055번 탈출 - JavaScript(NodeJS) (0) | 2021.07.07 |