백준 1541번 잃어버린 괄호 - node.js

fgStudy·2022년 3월 26일
0

코딩테스트

목록 보기
2/69
post-thumbnail

해당 포스팅은 백준 1541번 잃어버린 괄호 풀이를 다룬다. 문제 링크
코드는 javascript로 작성하였다.

문제

주어진 식에 괄호를 적절히 쳐 값을 최소로 만들자.

입력

  • 첫째 줄에 식이 주어진다.
    식은 '0~9', '+', '-'로만 이루어져 있다.
  • 연속해서 두 개 이상의 연산자가 나타나지 않는다.
  • 수는 0으로 시작할 수 있다.
  • 식의 길이는 50 이하

출력

첫째 줄에 정답을 출력한다.


Think

값이 최솟값이 되려면 최대한 큰 수를 빼야한다.
그러기 위해서는 -가 나올 때 그 다음 -가 나올 때까지 괄호를 쳐야한다.

예시로 50-20+30+50-100+10 의 최솟값을 생각해보자.
해당 식은 50 - (20+30+50) - (100+10) = -160이 최소이다. 즉 -가 나오면 그 다음 -가 나올 때(그 사이의 연산은 전부 +이다)까지 괄호를 쳐주어야 한다.


풀이

  • input을 -를 기준으로 나눈 후 배열로 담아준다.
  • 배열의 원소를 돌면서 빼주는데, 배열의 원소가 더하기 연산자가 포함되어 있는 리터럴일 시 ex: 20+30+50, +를 기준으로 나눈 후, map을 통해 원소들을 더해준다.

전체 코드

const input = require('fs').readFileSync('/dev/stdin').toString();

const sumBracket = input.split("-").map(el => {
    return el.split("+").reduce((prev, curr) => Number(prev) + Number(curr), 0);
});

if (sumBracket.length === 1) {
    console.log(sumBracket[0])
} else {
    let result = sumBracket[0];
    for(let i = 1; i < sumBracket.length; i++) {
        result -= sumBracket[i];
    }
    console.log(result);
}
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글