[백준10799_자바스크립트(javascript)] - 쇠막대기

경이·2024년 6월 13일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
66/325
post-thumbnail

🔴 문제

쇠막대기


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const input = fs.readFileSync(path).toString().trim().replaceAll('()', '0');
const stack = [];
let count = 0;

for (const target of input) {
  if (target === '(') stack.push('(');
  if (target === '0') count += stack.length;
  if (target === ')') {
    stack.pop();
    count += 1;
  }
}
console.log(count);

🟢 풀이

스택 문제 유형이다. 왜냐면 닫는 괄호를 만나면 빠져나와야 되니까! 이때 선입 후출구조로 빠져야 하니 스택을 사용해야 된다. 예전에는 구현으로 풀었던 기억이...!
근데 이때 레이저를 표시하는 ()랑 막대기의 길이를 표시하는 ( ) 랑 구분을 해줘야 한다. 그래서 나는 ()0이라는 문자로 바꿔줬다.
이후 막대기를 쌓을 스택배열을 하나 만들어주고, 레이저로 막대기를 잘랐을 때 막대기의 개수를 세어줄 count 변수를 만들어줬다.
그래서 (일땐 스택에 푸시해주고(막대기를 쌓아주고)
0일땐 레이저가 지나간다고 생각하고 쌓인 막대기의 길이를 count에 더해준다.
)일땐 막대기의 끝을 의미하므로 스택에서 pop해주고 count 값을 1 증가시켜주면 된다.


🔵 Ref

profile
록타르오가르

0개의 댓글