문제
문자열을 입력받아 문자열 내의 모든 괄호의 짝이 맞는지 여부를 리턴해야 합니다.
function balancedBrackets(str) {
const stack = [];
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (char === '(') {
stack.push(char);
} else if (char === ')') {
if (stack.length === 0) {
return false;
}
stack.pop();
}
}
return stack.length === 0;
}
function balancedBrackets(str) {
const stack = [];
for (let i = 0; i < str.length; i++) {
const char = str[i];
if (char === '(' || char === '[' || char === '{') {
stack.push(char);
} else if (char === ')' || char === ']' || char === '}') {
if (stack.length === 0) {
return false;
}
const top = stack.pop();
if (
(char === ')' && top !== '(') ||
(char === ']' && top !== '[') ||
(char === '}' && top !== '{')
) {
return false;
}
}
}
return stack.length === 0;
}
가장 일반적인 스택의 예시는 찬장의 접시다.
접시를 차례대로 쌓아 놓으면 맨 위에 있는 접시부터 꺼낼 수 있다.
아래에 있는 접시를 가져오려면 그 위에 있는 것들을 제거해야 한다는 거다.
스택의 핵심 개념은 "LIFO"다.
이게 뭔 소리야... 싶겠지만
후입선출이다.
LIFO는 "Last-In, First-Out"의 약자인 것이다!
스택에 데이터를 추가할 때
스택은 주로 아래 두 가지 동작을 써야 할 때 사용한다.
정리하자면
스택은 데이터를 임시로 저장하고,
필요할 때 차례대로 가져올 수 있는
추상적인 데이터 구조이고,
위 코드와 설명에서 제시한 push, pop, top은
스택을 조작하기 위한 메서드다.