세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.
정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.
문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.
정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
input.pop();
const getBalanceTestResults = phrases => {
const targets = '()[]';
const opens = '([';
const answers = phrases.map(phrase => {
const stack = [];
for (const character of phrase) {
if (!targets.includes(character)) continue;
if (opens.includes(character)) {
stack.push(character);
} else if (character === ']') {
if (!stack.length || stack.at(-1) !== '[') return 'no';
stack.pop();
} else if (character === ')') {
if (!stack.length || stack.at(-1) !== '(') return 'no';
stack.pop();
}
}
return stack.length !== 0 ? 'no' : 'yes';
});
return answers.join('\n');
};
console.log(getBalanceTestResults(input));