카테고리 없음

스택_올바른 괄호(프로그래머스)

코드냠냠꿀꺽 2022. 8. 22. 16:18

이전에 알고리즘 문제들을 파이썬으로 풀었었는데 노드를 하면서 자바스크립트를 사용하게 되어

자바스크립트를 활용해서 알고리즘 문제들을 다시 풀어보려 한다!

처음에 stack을 사용하지 않고 해보고자 count 변수를 생성하여 여는 괄호이면 + 닫는 괄호이면 -를 하는 방식으로 해결해 보려 하였다. 

하지만 역시나 이런 방식은 순서에 상관없이 count 값이 마지막에 0 이면 무조건 true 값이 return 되는 방식이라

괄호의 짝이 맞지 않아도 여는 괄호 닫는 괄호의 개수만 같으면 무조건 true 값이 나오게 된다.

ㅎㅎ,, 너무 단순하게 생각했던,,

 

 

아래 코드가 최종 결과물! 

array로 stack 구조를 사용하여 코드를 다시 구현했다. 

1. 첫번째 value값이 닫는 괄호이면 괄호 짝이 맞을 수 없으니 바로 false 값을 리턴

 

2. stack에 들어있는 최신 값과 현재 값이 괄호 짝이 맞는 경우 stack에 들어있는 괄호를 삭제하고 다음 괄호 순서로 넘어감

 

위의 조건으로 하여 스택에 들어가는 괄호들이 짝이 맞는지 확인하는 방식으로 수정을 하였다. 

function solution(s){
    var answer = true;
    const stack = [];
    for(let index=0;index<s.length;index++){
        if(index===0&&s[index] === ")"){
            return false;
        }
        if(stack[stack.length-1]==="("&&s[index]===")"){
            stack.pop();
        }else{
            stack.push(s[index]);
        }
        
    }
    if(stack.length !==0){
        return false
    }else{
        return true
    }
    
}

 


관련 강의를 듣다가 처음 stack을 사용하지 않고 풀려고 했던 접근도 가능 할 수 있다는 것을 알게 되었다. 

function solution(s){
	let count = 0;
    
    for(const c fo s){
    	if(c === '('){
        	count += 1;
        else{
        	if(count === 0){
            	return false;
            }
            count -= 1;
        }
    return count === 0;
}