🤜 코테

백준 문제 풀이 : 쇠막대기 (10799)

wnwlals13 2024. 6. 13. 16:38

문제 접근

  • 처음
    • 우선 stack에 넣는다.
    • 현재 괄호가 "(" 라면 쇠막대기를 하나 더한다
    • 현재 괄호가 ")"라면 전 괄호와 쌍이 맞을 때 기존 쇠막대기 수를 2배한다.
    • stack에 넣은 쌍 2개를 꺼낸다.

 

문제 풀이 실패 요인

  • 비슷하지만, 쇠막대기 개수를 계산하는 포인트가 달랐던 것 같다.  stack에 모두 넣고 뺀다는 게 좀 실패 요인 이었던 것 같다.
  • 아깝다. 좀만 더 스택 자료구조에 대해서 알고 있었다면 풀 수 있었을텐데 다음에 또 다시 풀어본다.

 

문제 접근 풀이

  • 괄호가 "("이면 stack에 넣는다.
  • 괄호가 ")"이면 전 괄호를 본다.
    • 전 괄호가 "("이면 레이저이다. stack을 pop하고 count에 stack 배열 길이를 더해준다.
    • 전 괄호가 ")"이면 쇠막대기의 끝이다. stack을 pop하고 count에 남은 쇠막대기를 더한다.

 

let fs = require('fs');
let input = fs.readFileSync('/dev/stdin').toString().trim().split('');

let stack = []; // 스택 초기화

let stickCnt = 0;
for (let i = 0 ; i<input.length ; i++) {
    if(input[i] === '(') {
        stack.push(input[i]);
    } else {
        if(input[i-1] === '(') {
            // 레이저
            stack.pop();
            stickCnt += stack.length;
        } else {
            // 쇠막대기 끝
            stack.pop();
            stickCnt++;
        }
    }
}

console.log(stickCnt);