[백준 10799] 쇠막대기 with node.js

waterglasses·2022년 3월 24일
0
post-thumbnail

📌 문제

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

📌 풀이

괄호 모양을 보자마자 이건 스택이다 라는 생각과 함께 문제를 접하였다. 로직은 별거 없다.
1. 우선 괄호가 '('가 나오면 스택에 추가한다.
2. 그리고 닫는 괄호 ')' 가 나오면 두가지 경우가 생긴다.

1) 레이저가 되어 모든 막대기를 다 자르는 경우
	이럴 때에는 스택에 쌓은 '('의 개수 만큼 쇠막대기가 잘리기 때문에 스택의 길이만큼 쇠막대기 개수에 더해준다.

2) 막대기의 끝 부분이라 막대기 1개가 더 생기는 경우
	이 경우는 쇠막대기 개수에 +1을 더해주면 된다.

📌 코드

const fs = require("fs");
const stdin = (
  process.platform === "linux"
    ? fs.readFileSync("/dev/stdin").toString().trim()
    : `(((()(()()))(())()))(()())`
).split("\n");

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const brackets = input().split("");
const stack = [];
let stickCnt = 0;
for (let i = 0; i < brackets.length; i++) {
  if (brackets[i] === "(") {
    stack.push(brackets[i]);
  } else {
    stack.pop();
    if (brackets[i - 1] === "(") {
      stickCnt += stack.length;
    } else {
      stickCnt += 1;
    }
  }
}

console.log(stickCnt);

📌 느낀점

문제를 처음 보았을 때 분명 스택인데.. 스택인데..? 어떻게 풀어야하지? 싶었다.
그림으로 스택을 그려서 ')'가 나왔을 때 어떤식으로 진행되는지를 파악하니 푸는 방법이 떠올랐다. 문제푸는 시간은 오래걸리지 않았지만 생각만으로도 1시간을 썼다.. 더 노력해야지!

나는 그래프 형식 말고는 다른 알고리즘 모두 새롭고 어렵기 때문에 자주 보고 익숙해져야겠다는 생각이 더욱 들었다. 매일매일 깨달음이 있다니..

profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글