// 문자열 str가 주어졌을때 괄호가 제대로 열리고 닫혀있는지를 출력해라
// 문자열은 ( ) 두가지만 주어지며 반드시 열리고 닫혀야 한다.
// 문자열은 100,000 이하의 자연수이다.
'()()' // true
'(())()' // true
')()(' // false
'(()(' // false
function solution(str) {
// 닫힘이 먼저 나오면 무조건 false 이므로 먼저 분기처리
if(str[0] !== '(') {
return false;
}
// stack에서 중첩 괄호 체크
const stack = [];
for(let i of str){
// 열림이면 push
if(i === '(') {
stack.push(i);
} else {
// 닫힘이면 열림을 pop
stack.pop();
}
}
// 만약 쌍이 안 맞아서 남아있다면 false
return stack.length === 0;
}
// stack log
solution('(())()');
['(']
['(', '(']
['(']
[]
['(']
[]
시간 복잡도를 계산해본다면 for 문 도는 것이 가장 큰 작업이기에 O(n)으로 생각된다.