백준 10799번 쇠막대기 - node.js

fgStudy·2022년 5월 22일
0

코딩테스트

목록 보기
24/69
post-thumbnail

해당 포스팅은 백준 10799번 쇠막대기 풀이를 다룬다. 문제 링크
코드는 Javascript로 작성하였으며 스택으로 풀이하였다.


풀이

해당 문제는 닫는 괄호가 나타났을 때 이것이 레이저인지 아니면 막대기의 끝을 나타내는 것인지를 구별해야 하는 문제이다. 구별하는 방법은 닫는 괄호가 나타났을 때 전의 문자를 체크해서, 이게 여는 괄호이면 레이저, 아니면 쇠막대기라고 판별하면 된다.

따라서 여는 괄호일 시 전부 stack에 푸시하다가, 닫는 괄호가 나오면 스택에서 pop한다음, 괄호가 레이저라면 스택 사이즈만큼 더해주고, 파이프의 끝이라면 1을 더해주면 된다.

닫는 괄호가 나올시 레이저이든 파이프든 stack에서 pop하는 이유는, 만약 pop을 하지 않을 시 괄호가 레이저일 때 레이저까지 더해주게 되기 때문이다.

파이프의 끝일 때 1을 더해주어야 하는 이유는, 파이프 끝부분(자기 자신)을 더해주어야 하기 때문이다.


전체 코드

const input = require('fs').readFileSync('/dev/stdin').toString().slice(0, -1);
console.log(solution(input));

function solution(str) {
    let answer = 0;
    const stack = [];
    for (let i=0; i < str.length; i++) {
        if (str[i] === '(') {
            stack.push('(');
            continue;
        }
        stack.pop();
        if (str[i-1] === '(') answer += stack.length;
        else answer += 1;
    }
    return answer;
}
profile
지식은 누가 origin인지 중요하지 않다.

0개의 댓글