문자열로 입력받은 모든 괄호의 짝이 맞는지 판별하는 문제.
'[' '{' '(' 가 모두 올 ㄱ수 있지만 '('만 판별 한기로 한다.
괄호는 열린만큼 닫혀야 하고, 빈 문자열을 받게되면 true를 리턴한다.
if(str.length === 0) { return true; } const arr = str.split('').filter(item => item !== '[' && item !== ']' && item !== '{' && item !== '}') if(arr.length % 2 === 1) { return false; } if(arr[0] === ')') { return false; } for(let i = 0; i < arr.length / 2; i++) { if(arr[i] === '(' && arr[arr.length - 1] === ')') } // 처음에는 성립하지 않는 경우의 수를 제외해 주고 문제를 풀려고 하였으나..
const balancedBrackets = function (str) { const stack = []; const opener = { '{': '}', '[': ']', '(': ')' } const closer = '}])'; for(let i = 0; i < str.length; i++) { if(str[i] in 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 } } } return stack.length === 0; //stack이 비워지면 true 반환함. }; // 스택을 활용하여 짝이 맞지 않는 경우를 판별하여 문제를 푸는 방법이 있었다...
점점 토이 문제를 풀며 한계를 느끼곤 한다....이런 방법을 어떻게 떠올리는지....
참 세상에는 능력자들이 많은것 같다.... 문제를 많이 접하다 보면 익숙해 지지 않을까 한다....]
분발하자....