객체 및 stack, push, pop을 활용한 괄호의 짝 확인 Javascript

cptkuk91·2022년 9월 2일
2

Algorithm

목록 보기
84/161
post-custom-banner

문제

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

  • 다음 단계에 맞춰 함수를 작성해 보세요
    • 괄호의 종류를 단 한가지로 한정합니다.
    • 괄호의 종류를 늘려 모든 종류의 괄호에도 작동하도록 합니다.
    • 괄호를 제외한 문자열이 포함된 경우에도 작동하도록 합니다.

주의 사항

  • 괄호의 종류는 (, )만 고려합니다.
  • 괄호는 먼저 열리고((), 열린만큼만 닫혀야()) 합니다.
  • 빈 문자열을 입력받은 경우, true를 리턴해야 합니다.
  • 모든 종류의 괄호((, ), {, }, [, ])가 포함된 문자열을 입력빋아 모든 괄호의 짝이 맞는지 여부를 리턴해 보세요.

입출력 예시

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

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

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

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

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

풀이

const balancedBrackets = function (str) {
	let result = [];
    let start = {
    	'(' : ')',
        '{' : '}',
        '[' : ']'
    }
    
    let finish = ')}]';
    
    for(let i = 0; i < str.length; i++){
    	if(str[i] in start){
        	result.push(str[i]);
        } else if(finish.includes(str[i])){
        	let top = result.pop();
            let pair = start[top];
            if(pair !== str[i]){
            	return false;
            }
        }
    }
    return result.length === 0;
};

프로그래머스 올바르 괄호 문제와 비슷합니다.
우선 제시된 괄호가 한정적이기 때문에 start, finish를 통해 미리 선언해주고,
만약 start 안에 str[i]가 존재한다면 빈 배열(result)에 push 해줍니다.
이후 위에서 부터 하나씩 pop()을 통해 뽑아냅니다.
pair를 통해 쌍이 맞는지 확인할 수 있고, 전부 뽑아냈을 때 길이가 0이라면 true를 반환해 문제를 해결할 수 있습니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)
post-custom-banner

0개의 댓글