Toy_ #17.balancedBrackets

const_yang·2021년 11월 10일
0

Toy야 놀자

목록 보기
9/14
post-thumbnail

- 문제

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

주의사항

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

입출력 예시

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

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

- 풀이

const balancedBrackets = function (str) {
  // 1. str을 배열로 만든다
  // 2. 괄호의 모음 객체를 (열린 괄호 = 키, 닫힌 괄호 = 값) 만들어 각 괄호의 짝 비교를 하도록 한다.
  // 3. 반복문으로 str 배열을 확인한다
  // 4. 만약 요소값이 키값의 종류인 열린 괄호인 경우 빈 배열에 넣어 준다.
  // 5. 요소값이 닫힌 괄호인 경우 괄호 모음 객체 중 빈 배열에 마지막으로 들어간 열린 괄호를 키로 가지는 값과 비교하여, 같으면 배열에 넣었던 열린 괄호를 지운다. 다르면 해당 닫힌 괄호도 빈 배열에 넣는다.
  let verify = { "(" : ")", "{" : "}", "[" : "]" }
  const aux = str.split('').reduce((ac, cv) => {
    if (cv === verify[ac[ac.length - 1]]) {
      ac.pop()
    } else {
      ac.push(cv)
    }
    return ac
    }, [])
  return aux.length === 0
}

stack을 이용했다는 점과 짝을 키와 값으로 설정해 두어 비교하는 식을 구현했다.

0개의 댓글