코테/코드스테이츠[JS]

Toy 문제 17

반응형

문제

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

 

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

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

 주의사항

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

Advanced

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

 

수도코드(해석)

종류가 6개만 있어서 각 종류에 대한 갯수를 세어서 같은지에 대해 확인 할 수 있지만, 어드벤스를 포함한 원하는 알고리즘 코드에 대해 이야기 하겠습니다.

 

우선 열리는 부분을 앞뚜껑, 닫히는 부분을 뒷뚜껑이라 칭하겠습니다.

 

앞두껑을 stack이라는배열에다가 나오는 족족 전부 담아두다가

뒷두껑이 나오게 되면 짝이있는지 확인할 수 있도록 코드를 작성하면됩니다.

 

주의사항 2번처럼 무조건 앞뚜껑이 나온다음 뒤뚜껑이 나와야 되기 때문이고 [{]} 이런식으로 엇갈려 닫히면 안되면 안되기 때문에

무조건 stack에 쌓이는 마지막 부분으로만 비교를 해야 합니다.

 

 

const balancedBrackets = function (str) {
  const stack = []; // 스텍 부분
  const opener = { // 앞뚜껑인지 판별 여부와, 뒷뚜껑 짝찾기
    '{': '}',
    '[': ']',
    '(': ')',
  };
  const closer = '}])'; // 뒷뚜껑 판별에 쓰일 문자열

  for (let i = 0; i < str.length; i++) {
    if (str[i] in opener) { // opener 키값을 통해서 앞뚜껑인지 판별하고
      stack.push(str[i]);  // 맞으면 스텍에 값을 넣는다.
    } else if (closer.includes(str[i])) { // 뒷뚜껑인지 확인하고 맞으면
      const top = stack.pop(); //스텍에 쌓인 뒷 값을 꺼내와서
      const pair = opener[top]; // 오프너에 키값을 통해 벨류를 받아오고
      if (pair !== str[i]) { // 결국 앞뚜껑과 뒷뚜껑이 같은지에 대한 조건식이고
        return false; // 틀릴시 false 리턴
      }
    }
  }

  return stack.length === 0;
};

 

 

 

반응형

'코테 > 코드스테이츠[JS]' 카테고리의 다른 글

Toy 문제 19  (0) 2021.08.07
Toy 문제 18  (0) 2021.08.02
Toy 문제 16  (0) 2021.07.31
Toy 문제 15  (0) 2021.07.30
Toy 문제 14  (0) 2021.07.26