본문 바로가기
Algorithm/백준[BOJ]

[JS] 백준 4949번 균형잡힌 세상

by jgo 2022. 6. 11.

문제 링크

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

풀이 전략

모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다. (다른 괄호 일 수도 있음)
모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.

코드 

const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");

input.pop();
solution(input);

function solution(arr) {
    const answerArr = [];

    for (const str of arr) {
        answerArr.push(confirm(str));
    }

    console.log(answerArr.join("\n"));
}

function confirm(str) {
    const stack = [];

    for (const char of str) {
        if (char === "(" || char === "[") stack.push(char);

        if (char === ")") {
            const v = stack.pop();
            if (v === undefined || v === "[") return "no";
        } else if (char === "]") {
            const v = stack.pop();
            if (v === undefined || v === "(") return "no";
        }
    }

    if (stack.length) return "no";
    else return "yes";
}

 

회고

조건에 맞추어 식을 작성하면 된다. 스택의 기본적인 동작원리를 알려주는 문제여서 어떻게 동작하는지 원리를 알면서 문제를 푸는 것이 좋다. 이렇게 비교적 쉬운 문제들은 가독성을 더욱 좋게 만들려고 고민해본다. 이해하기 쉬운 코드는 아직 어려운 것 같다.  

 

더 좋은 방법이나 의견이 있으시다면 댓글 부탁드립니다 :)

댓글