반응형
문제
문자열을 입력받아 문자열 내의 모든 괄호의 짝이 맞는지 여부를 리턴해야 합니다.
다음 단계에 맞춰 함수를 작성해 보세요
- 괄호의 종류를 단 한가지로 한정합니다.
- 괄호의 종류를 늘려 모든 종류의 괄호에도 작동하도록 합니다.
- 괄호를 제외한 문자열이 포함된 경우에도 작동하도록 합니다.
주의사항
- 괄호의 종류는 (, )만 고려합니다.
- 괄호는 먼저 열리고((), 열린만큼만 닫혀야()) 합니다.
- 빈 문자열을 입력받은 경우, 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 |