[ 백준 / node.js ] 1541.잃어버린 괄호

HYEJIN·2023년 2월 7일
0

백준

목록 보기
2/2

최솟값을 가지도록 괄호가 쳐져있다고 생각해야한다.

-가 붙은 숫자를 시작으로 뒤에가 가장 값이 클때 괄호를 닫아줘야한다.
+와 -연산만 존재함으로 가장 값이 클 때는 + 연산이 이어져서 나오는 부분이다.
(다음 - 를 만나기 전까지! )

10+20-30+40-50
이라고 가정하면 10+20-(30+40)-50 이 가장 작은 값이다.

  1. -를 기준으로 나누면 아래와 같다.
    [ '10+20' , '30+40' , '50' ]
  2. 배열을 순회하면서 +연산이 필요한 부분은 모두 더해준다.
    [30, 70, 50]
    • 기준으로 분리했으니, 첫번째 배열부터 시작하여 값을 빼준다.
      정답 : -150
const fs = require("fs");

//1. - 기준으로 배열로 분리
let input = fs.readFileSync("/dev/stdin").toString().split("-");
//1번 input = [ '10+20' , '30+40' , '50' ]

//3번 answer = -130
// reduce에서 값을 -해서 누적하여 값 반환 
let answer = input.reduce((total, item, idx) => {
  
  //split : 각각 배열은 문자열로 되어있으며, + 연산자가 있는 것도 있다. 
  //map : + 기준으로 나눠 배열로 만들고 숫자로 만든다.
  //reduce : 값을 누적하여 합해준다 > 합한 값이 나오도록 한다. 
  //2번 sum= [30, 70, 50]
  let sum = item
    .split("+")
    .map((a) => +a)
    .reduce((total, cur) => total + cur);
  
  return idx === 0 ? total + sum : total - sum;
  
}, 0);

console.log(answer);

리턴할 때 처음에 total-sum 으로 해줬는데 그럴경우,
-30-70-50이 되어버린다.
첫번째의 경우는 양수 값이기 때문에 30-70-50이 되어야하기 때문에,
첫번째 인자일 경우는 값을 더할 수 있도록 해야한다.

0개의 댓글