balancedBrackets

semin·2023년 6월 27일
0

section 3

목록 보기
5/5
post-thumbnail

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

balancedBrackets

의사 코드

  1. 스택 선언
  2. 입력 문자열에 루프 걸어서 각각 체크.
  3. 현재 문자: ( ? 스택 쌓기
  4. 현재 문자: ) ?
    4-1. 스택 === [] ? 짝 없음. false
    4-2. 스택 !== [] ? 짝 있음. 스택에서 괄호 꺼내기
  5. 루프 종료 후 스택 내부 확인
    5-1. 스택 === [] ? 전부 짝 있음. true
    5-2. 스택 !== [] ? 짝 없는 괄호 존재 -> false

작성 코드

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;
}

balancedBrackets - Advanced

의사 코드

  1. 스택 선언
  2. 입력 문자열에 루프 걸어서 각각 체크.
  3. 현재 문자: (, [, { ? 스택 쌓기
  4. 현재 문자: ), ], } ?
    4-1. 스택 === [] ? 짝 없음. false
    4-2. 스택 !== [] ? 스택 최상단 괄호와 현재 괄호 짝 여부 확인
  5. false ? false
    5-1. true ? 스택에서 괄호 꺼내기
  6. 루프 종료 후 스택 내부 확인
    6-1. 스택 === [] ? 전부 짝 있음. true
    6-2. 스택 !== [] ? 짝 없는 괄호 존재 -> false

작성 코드

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;
}

Stack

가장 일반적인 스택의 예시는 찬장의 접시다.
접시를 차례대로 쌓아 놓으면 맨 위에 있는 접시부터 꺼낼 수 있다.
아래에 있는 접시를 가져오려면 그 위에 있는 것들을 제거해야 한다는 거다.

스택의 핵심 개념은 "LIFO"다.
이게 뭔 소리야... 싶겠지만
후입선출이다.

LIFO는 "Last-In, First-Out"의 약자인 것이다!

스택에 데이터를 추가할 때

  1. 가장 최근에 추가된 데이터는 스택의 맨 위에 위치
  2. 데이터 제거 시 최상위 데이터가 먼저 제거됨

스택은 주로 아래 두 가지 동작을 써야 할 때 사용한다.

  1. Push(추가)
    스택에 데이터를 추가한다.
    새로운 데이터는 항상 스택의 최상단에 위치하게 됨.
  2. Pop(제거)
    스택의 맨 위에 있는 데이터를 제거.
    가장 최근에 추가한 데이터부터 제거됨.

정리하자면
스택은 데이터를 임시로 저장하고,
필요할 때 차례대로 가져올 수 있는
추상적인 데이터 구조이고,

위 코드와 설명에서 제시한 push, pop, top은
스택을 조작하기 위한 메서드다.

0개의 댓글