본문 바로가기
여행
👥
총 방문자
📖
0개 이상
총 포스팅
🧑
오늘 방문자 수
📅
0일째
블로그 운영

여러분의 방문을 환영해요! 🎉

다양한 개발 지식을 쉽고 재미있게 알려드리는 블로그가 될게요. 함께 성장해요! 😊

백준 문제풀이/Nodejs

[백준][그리디] 1541 잃어버린 괄호 NodeJs 구현

by 꽁이꽁설꽁돌 2025. 1. 16.
728x90
반응형
     

목차

  1. 문제
  2. 문제 구현 방향
  3. 문제 풀이
  4. 코드 구현

 

 

문제

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

 

 

문제 구현 방향

나는 처음에 문자열 앞에 +를 더해준뒤 연산자와 수를 배열로 만들고 시작하였다.

그렇게 하면 스택으로 접근하기 쉽다.

 

 

문제 풀이

스택이 비어있고 +가 나오면 바로 연산을 해준다.

스택이 안비어있고 +가 나오면 스택에 push 한다.

스택이 비어있고 -가 나오면 스택에 push 한다.

스택이 안비어있고 -가 나오면 스택에서 모든 값을 연산한 후 넣어준다.

 

--------------------------

마지막으로 스택에 남아있는 - 연산을 실행해 준다.

 

 

코드 구현

javascript
const input = require("fs")
  .readFileSync("./dev/stdin", "utf-8")
  .trim()
  .split("\n");

let ans = 0;
let str = "+";
str += input[0].trim();
let cnt = 0;
let operate = [];
let num = [];
let stack = [];
let sel = "";
for (let i = 0; i < str.length; i++) {
  if (str[i] != "-" && str[i] != "+") sel += str[i];
  else {
    operate.push(str[i]);
    if (sel !== "") {
      num.push(Number(sel));
      sel = "";
    }
  }
}
num.push(Number(sel));


for (let i = 0; i < num.length; i++) {
  if (operate[i] == "+") {
    if (stack.length === 0) ans += num[i];
    else stack.push(num[i]);
  } else if (operate[i] == "-") {
    if (stack.length === 0) stack.push(num[i]);
    else {
      while (stack.length) {
        ans -= stack.pop();
      }
      stack.push(num[i]);
    }
  }
}
while (stack.length) {
  ans -= stack.pop();
}

console.log(ans);

 

 

반응형