알고리즘/코딩테스트 공부
6-1 올바른 괄호 (스택)
YG - 96년생 , 강아지 있음, 개발자 희망
2021. 12. 10. 05:57
문제
괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.
풀이
function solution(s) {
let answer = "YES";
let stack = [];
let first,
last = "";
(first = s[0]), (last = s[s.length - 1]);
if (first !== "(" || last !== ")") return "NO";
for (let x of s) {
if (x === "(") stack.push(x);
else {
if (stack.length === 0) return "NO";
stack.pop();
}
console.log(stack);
}
if (stack.length > 0) return "NO";
return answer;
}
let a = "((((())())((())))(((((())(((()))))))()))))";
console.log(solution(a));
맨 앞과 맨 뒤의 요소를 탐색하여 맞는지 1차적으로 체크한 후 "(" 이 나온다면 push ")" 이 나오면 pop 을 해주어 문제를 풀었습니다.
다른 풀이
function solution(s) {
let answer = "NO";
let cnt = 0;
let first,
last = "";
(first = s[0]), (last = s[s.length - 1]);
console.log(first, last);
if (first !== "(" || last !== ")") return "NO";
for (let x of s) {
//console.log(x);
if (x === "(") cnt++;
else cnt--;
}
console.log(cnt);
if (cnt === 0) return "YES";
return answer;
}
let a = ")()()()(";
console.log(solution(a));
개수를 세어 문제를 풀었습니다.