본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[BaekJoon] 1541번 잃어버린 괄호_JavaScript

by codingBear 2022. 6. 24.
728x90
반응형

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

 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net


Question

 세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다. 그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

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

Input

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

Output

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


Example Input

55-50+40

Example Output

-35

My Solutions

const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().trim();

const str = input.split('-');

solution(str);

function solution(str) {
  let ans = 0;

  for (let i = 0; i < str.length; i++) {
    let sum = 0;
    const tmp = str[i].split('+');

    for (let j = 0; j < tmp.length; j++) {
      sum += +tmp[j];
    }

    if (i === 0) ans += sum;
    else ans -= sum;
  }
  console.log(ans);
}

 어떻게 하면 최소값을 도출해낼 수 있을까에 초점을 맞춰 접근해야 한다. 주어진 문자열을 계산하여 최소값을 뽑아내려면 더하기 연산자를 우선적으로 계산하게끔 괄호를 삽입하면 된다. 즉, 주어진 문자열에 실제로 괄호를 삽입하는 것이 아니라 더하기 연산을 먼저 하면 된다는 뜻이다.

 주어진 문자열을 split() 메서드를 활용하여 빼기(-) 연산자를 기준으로 나눈 다음, 이중 for문을 돌려 더하기(+) 연산자를 기준으로도 한번 더 나눈다. 그런 다음 이중 for문을 돌려 추출해낸 더하기 연산 결괏값을 sum 변수에 저장한다. 제일 처음 결괏값을 ans 변수에 더하고, 여기에 나머지 결괏값을 빼 나가면 최소값을 구할 수 있다.


함께 보기

1. split() 메서드

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split

 

String.prototype.split() - JavaScript | MDN

The split() method divides a String into an ordered list of substrings, puts these substrings into an array, and returns the array. The division is done by searching for a pattern; where the pattern is provided as the first parameter in the method's call.

developer.mozilla.org

 

728x90
반응형

댓글