본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 균형잡힌 세상 4949 (Javascript, c++)

by Cafe Mocha 2022. 6. 16.

4949번: 균형잡힌 세상 (acmicpc.net)

 

4949번: 균형잡힌 세상

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

www.acmicpc.net


접근 방법

알고리즘 : 스택

 

1. 입력 값 정렬

2. 값 비교 후 스택 적용

 


Javascript

function solution() {
  let input = require("fs")
    .readFileSync("input.txt") //"/dev/stdin"
    .toString()
    .trim()
    .split("\n")
    .map((val) => val.trim());

  let len = input.length;
  for (let i = 0; i < len - 1; i++) {
    let arr = input[i].split("").filter((v) => v === "(" || v === ")" || v === "[" || v === "]");
    if (arr.length === 0) {
      console.log("yes");
      continue;
    }

    let stk = [];
    arr.forEach((v) => {
      if (stk.length === 0) {
        stk.push(v);
      } else {
        let tmp = stk[stk.length - 1];
        if ((v === ")" && tmp === "(") || (v === "]" && tmp === "[")) {
          stk.pop();
        } else {
          stk.push(v);
        }
      }
    });

    if (!stk.length) {
      console.log("yes");
    } else {
      console.log("no");
    }
  }
}

solution();

 


C++

#include <bits/stdc++.h>
using namespace std;



int main()
{
  freopen("input.txt", "r", stdin); //제출 시 삭제

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

  while(1){
    string s;
    getline(cin,s);
    if(s == ".") break;

    stack<char> stk;

    for(char a: s){
      if(a=='('||a==')'||a=='['||a==']'){
        if(stk.empty()) stk.push(a);
        else{
          char tmp = stk.top();
          if((a == ')' && tmp == '(') || (a == ']' && tmp == '[')){
            stk.pop();
          } else{
            stk.push(a);
          }
        }
      }
    }

    if(stk.empty()){
      cout<<"yes"<<"\n";
      continue;
    } else{
      cout<<"no"<<"\n";
      continue;
    }





  }

}