본문 바로가기

Toy Problem

Balanced Brackets

관련 : stack 자료 구조

 

 

문제

문자열을 입력 받아 문자열 내의 모든 괄호의 짝이 맞는지 여부를 리턴해야 한다.

 

 

Pseudocode

str[i]가 opener이면 stack 에 넣고

str[i]가 closer이면

1. stack에서 마지막 요소를 제거하고 이를 top이라고 한다.

2. top과 str[i]가 짝이 맞으면 true를 반환한다.

 

즉, stack에 쌓이는 것은 opener이고, str[i]가 closer일 때에는 이 closer가 stack에 가장 마지막에 넣은 요소와 짝이 맞는지 확인한다.

결과적으로 stack에 아무것도 남지 않게 되면 결과는 true이다.

 

 

코드 구현

const balancedBrackets = function(str) {

  let stack = [];
  let openers = {
    '(' : ')',
    '[' : ']',
    '{' : '}'
  }

  let closers = ')]}'

  for(let i = 0; i < str.length; i++){
    if(str[i] in openers){
      stack.push(str[i]);
    }else if(closers.includes(str[i])){ // closer가 나오면 opener와 짝이 맞는지 확인하기 위해
      let top = stack.pop(); // 가장 마지막에 넣은 opener를 꺼내고 top이라고 한다.
      let pair = openers[top] // 꺼낸 opener(top)에 해당하는 closer를 pair라고 할 때
      if(pair !== str[i]){ // 그 pair가 입력받은 closer(str[i])가 아니라면
        return false; // 바로 false를 반환하고 for문을 나온다.
      }
    }
  }
  return stack.length ===0; // 결과적으로 stack이 비었다면 true를 반환한다.
}

 

'Toy Problem' 카테고리의 다른 글

LPS : Longest Prefix which is also Suffix  (0) 2021.01.05
Quick Sort  (0) 2020.12.27
Bubble Sort  (0) 2020.11.19