두치의 개발공부

BaekJoon_1541(잃어버린 괄호) 본문

알고리즘

BaekJoon_1541(잃어버린 괄호)

Du_chi 2022. 5. 11. 22:11

문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

문제풀이

최솟값을 구하는거기 때문에 빼는 값이 최대인 경우를 구하면 총 합의 최솟값을 구할 수 있다.

우선 -로 split하여 - 뒤에 괄호로 묶일 수 있는 + 연산자를 나눈다.

ex) "55-50+45-20-10+30" => [55,50+45,20,10+30]

그 후에 +가 섞여있는 문자열을 +로 split한 후 합 연산을 한다.
ex) [55,50+45,20,10+30] => [55,95,20,40]

처음에 - 연산자로 split 하였던 거라 첫 번째 수 - (두 번째 수 부터 마지막 수 까지의 합) 을 하면 최솟값을 구할 수 있다.

 

코드

const answer = ([input]) => {

    // - 를 기준으로 split하여 뺄 수 있는 수를 구분한다
    // 55-50+45-20-10+30 => [55,50+45,20,10+30]
    const numbers = input.split('-').map(data =>
        // +로 되어있는 수를 split(+)하고 reduce를 통하여 더한다.
        // [55,50+45,20,10+30] => [55,95,20,40]
        data.split("+").map(Number).reduce((a, b) => a + b, 0)
    );

    // 처음에 split(-)를 하였던 거여서 첫번째 수-(두번째 수 부터 나머지 수 모두 더한 값)을 한다.
    const firstNumber = numbers.shift();
    const minusNumber = numbers.reduce((a, b) => a + b, 0);

    console.log(firstNumber - minusNumber);
}

const input = [];
require("readline")
    .createInterface(process.stdin, process.stdout)
    .on("line", (line) => {
        input.push(line);
    })
    .on("close", () => {
        answer(input);
        process.exit();
    });

 

코드는 깃헙에서도 확인할 수 있습니다.🤗

https://github.com/duduchi/Algorithm/tree/main/Greedy

 

GitHub - duduchi/Algorithm: 알고리즘 이론 및 구현 소스 정리 프로젝트 입니다.

알고리즘 이론 및 구현 소스 정리 프로젝트 입니다. Contribute to duduchi/Algorithm development by creating an account on GitHub.

github.com

 

'알고리즘' 카테고리의 다른 글

BaekJoon_1568(새)  (0) 2022.06.27
BaekJoon_1543(문서 검색)  (0) 2022.06.23
BaekJoon_1931(회의실 배정)  (0) 2022.05.10
BaekJoon_11047(동전)  (0) 2022.05.09
BaekJoon_11399(ATM)  (0) 2022.05.06