괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.
첫 번째 줄에 YES, NO를 출력한다.
(()(()))(()
NO
괄호는 닫는 괄호와 여는 괄호가 한 쌍일때 성립된다. 고로, 여는 괄호의 수와 닫는 괄호의 수가 일치하지 않는다면 No를, 일치한다면 Yes를 반환해주도록 코드를 작성했다.
let s1 = "(()(()))(()";
let s2 = "()";
console.log(solution(s1));
console.log(solution(s2));
function solution(s) {
let answer = 'yes';
let arr = s.split('');
let sum = 0;
for (let i = 0; i < arr.length; i++) {
if (s.charAt(i) === '(') {
sum++;
} else {
if (sum <= 0) {
answer = 'No'
} else {
sum--;
}
}
}
sum === 0 ? answer = 'yes' : answer = 'no'
return answer;
}
function solution(s) {
let answer = 'yes';
let stack = [];
if (s[0] === ')') answer = 'No';
for (let x of s) {
if (s === "(") {
stack.push(s) // Stack에 열린 괄호를 쌓는다.
}
else if (s === ")") {
stack.pop(); // 닫힌 괄호가 있다면, 배열의 맨 끝을 제거한다.
}
// stack은 선입 후출의 원리로 프로세스가 진행되는 알고리즘을 말한다.
}
if (stack.length !== 0) {
answer = 'No';
}
return answer;
}
stack은 쌓인 순서대로가 아니라, 가장 늦게 쌓인 순서대로 프로세스가 진행되는 알고리즘을 말한다.