알고리즘: balancedBrackets

Kyoorim LEE·2022년 7월 6일
0

알고리즘TIL

목록 보기
13/40

문제

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

다음 단계에 맞춰 함수를 작성해 보세요

  • 괄호의 종류를 단 한가지로 한정합니다.
  • 괄호의 종류를 늘려 모든 종류의 괄호에도 작동하도록 합니다.
  • 괄호를 제외한 문자열이 포함된 경우에도 작동하도록 합니다.

입력

인자 1 : str

string 타입의 괄호가 포함된 문자열

출력

boolean 타입을 리턴해야 합니다.

주의사항

  • 괄호의 종류는 (, )만 고려합니다.
  • 괄호는 먼저 열리고((), 열린만큼만 닫혀야()) 합니다.
  • 빈 문자열을 입력받은 경우, true를 리턴해야 합니다.

입출력 예시

let output = balancedBrackets('(');
console.log(output); // // -> false

output = balancedBrackets('()');
console.log(output); // --> true

Advanced

모든 종류의 괄호((, ), {, }, [, ])가 포함된 문자열을 입력빋아 모든 괄호의 짝이 맞는지 여부를 리턴해 보세요.

let output = balancedBrackets('[](){}');
console.log(output); // --> true

output = balancedBrackets('[({})]');
console.log(output); // --> true

let output3 = balancedBrackets('[(]{)}');
console.log(output); // --> false

풀이

  1. for문으로 str을 탐색한다
  2. opening 괄호이면 stack이라는 빈 배열에 넣는다
  3. closing 괄호이면 stack 안에 들어있는 가장 마지막으로 넣은 opening 괄호와 매칭되는지 확인한다
  4. 매칭되면 stack안에 있는 마지막 괄호를 pop()
  5. stack.length === 0 이면 true 리턴 // 모두 매칭되어 pop으로 빠져나갔다는 얘기
  6. stack.length !== 0 이면 false 리턴
const balancedBrackets = function (str) {
  // TODO: 여기에 코드를 작성합니다.
  let stack = [];

  for(let i = 0; i < str.length; i++) {
    if(str[i] === "(" || str[i] === "{" || str[i] === "[") {
      stack.push(str[i])
    } else {
      if(stack.length === 0) {
        return false;
      }
      if(str[i] === ")" && stack[stack.length-1] === "(" ||
         str[i] === "}" && stack[stack.length-1] === "{" ||
         str[i] === "]" && stack[stack.length-1] === "[") {
        stack.pop();
      }
    }
  }
  if(stack.length === 0) {
    return true;
  } else return false;
};

한 줄 평

profile
oneThing

0개의 댓글