백준 알고리즘/Lang-node.js

[백준/node.js] 4949 균형잡힌 세상

Jongung 2023. 1. 9. 00:13

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

  • 사용언어 : node.js
  • 알고리즘 : 자료구조, 문자열, 스택
  • Solved.ac Tier : Silver IV

 

node.js 코드

1. 문제 정리

스택의 기본 문제인 괄호 문제이다. 문제가 굉장히 간단하다. 각 괄호의 짝이 맞으면 yes를 출력 아니면 no를 출력하면 된다. 왼쪽 괄호만 나올 때, 오른쪽 괄호만 나올 때 같은 예외 처리를 신경 써서 코드를 짜면 해결할 수 있다. 

2. 완성 코드

const filePath = process.platform === 'linux' ? '/dev/stdin' : 'ans.txt';
const input = require('fs').readFileSync(filePath).toString().trim().split("\n");
const ans = [];
for(let text of input){
    const stack = [];
    let isCompare = true;
    if(text == ".") break;
    for(let i = 0; i < text.length; i++){
        if(text[i] == "[" || text[i] == "("){
            stack.push(text[i]);
        }
        else if(text[i] == "]"){
            if(stack[stack.length - 1] == "["){
                stack.pop();
            }
            else{
                isCompare = false;
                break;
            }
        }
        else if(text[i] == ")"){
            if(stack[stack.length - 1] == "("){
                stack.pop();
            }
            else{
                isCompare = false;
                break;
            }
        }
        else if(text[i] == ".") break;
    }
    if(stack.length > 0 || !isCompare) ans.push("no");
    else ans.push("yes");
}

console.log(ans.join("\n"));