코딩테스트, 알고리즘
[프로그래머스] 올바른 괄호 (JS / Stack)
지은이: 김지은
2023. 8. 27. 01:27
728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
입출력 예
s | answer |
"()()" | true |
"(())()" | true |
")()(" | false |
"(()(" | false |
문제 풀이
먼저, 이 문제를 쉽게 풀기 위해서 스택을 알아야한다.
스택(Stack)이란?
스택은 자료구조형으로 데이터를 일시적으로 저장하고, 빼는 후입선출 (LIFO, Last-In-First-Out) 원칙을 따른다.
스택은 push()와 pop()으로 수행할 수 있는데 push는 스택에서 데이터를 추가하고 pop은 데이터를 제거한다.
function solution(s){
let stack = [];
for (let i = 0; i < s.length; i++) {
if(s[i] === '(') { // '(' 여는 괄호면 stack에 넣기
stack.push(s[i])
} else if(s[i] === ')') { // 닫는 괄호라면 stack 마지막이 여는 괄호일 때만 빼기
if(stack.length !== 0 && stack[stack.length - 1] === '(') {
stack.pop()
} else return false
}
}
return stack.length === 0
}
for문을 돌리는데 '(' 여는 괄호라면 stack에 저장해 놓고 ')' 닫는 괄호라면 조건에 맞을 때만 pop()을 해준다.
stack이 비어있지 않거나, stack의 마지막 괄호가 여는 괄호일 때(한 쌍이어야하니까)만 pop()으로 빼준다.
stack이 다 비워졌다면 true를 그렇지 않다면 false를 반환한다.