[Node.js] 1541번 : 잃어버린 괄호


문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

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


풀이 과정

마이너스 앞에 있는 숫자를 최소로 만들고, 마이너스 뒤에 있는 숫자들의 크기를 가장 크게 만들면 주어진 조건을 만족할 수 있을 것 같다.

  1. -를 기준으로 문자열을 split
  2. 그리고 다시 +를 기준으로 split
  3. 각 배열들의 합을 우선 구한다. (map & reduce)
  4. 그리고 그 합들을 모두 빼준다. (reduce)

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
function lost(input) {
// -를 기준으로 String을 배열로 나눠준다.
let arr = input.split('-');
// +를 기준으로 +가 들어있는 배열들을 다시 또 나눠준다.
arr = arr.map((el) => el.split('+'));
// 그리고 각자 배열들의 요소들을 reduce를 사용하여 더해준다.
arr = arr.map((el) => el.reduce((prev, cur) => Number(prev) + Number(cur)));
// 이제 각 값들을 빼주기만 하면 된다
let answer = arr.reduce((prev, cur) => Number(prev) - Number(cur));
return answer;
}

lost('55-50+40');

[Node.js] 1541번 : 잃어버린 괄호

https://hoonjoo-park.github.io/algorithm/boj/1541/

Author

Hoonjoo

Posted on

2022-01-03

Updated on

2022-02-07

Licensed under

Comments