올바른 괄호

원지렁·2023년 3월 8일
0

알고리즘 정복기

목록 보기
5/12
post-thumbnail

올바른 괄호

문제

문자열 s가 올바른 괄호로 이루어져 있는지 판단하여 true/false 리턴해야 함

문제의 핵심

  • 나의 풀이
    stack 활용
    1) 반복문으로 s를 돌면서 s[i] 값이 '('라면 stack에 push 하기
    2) s[i]값이 ')'라면 bracket으로 stack.pop()과 짝이 맞는지 확인하여 pop으로 stack 요소 빼내기
    3) stack.length가 0 이고 left와 right값이 같은지 확인하여 값 리턴하기
function solution(s){
    let stack = [];
    let left = 0;
    let right = 0;

    let bracket = (right) => {
        if(right === ')'){
            return '(';
        }
    }

    if(s[0] === ')'){
        return false;
    }

    for(let i = 0; i < s.length; i++){
        if(s[i] === '('){
            stack.push(s[i]);
            left++;
        } else if(stack.pop() === bracket(s[i])){
            right++;
        }
    }

    if(stack.length === 0 && left === right){
        return true;
    } else {
        return false;
    }
}
  • 다른 풀이 방법
    1) 모든 값을 더한 상태값인 cum 선언하기
    2) '(' 값을 +1, ')' 값을 -1 로 치환하기
    3) ')' 갯수가 '(' 보다 많을 시 바로 false 리턴하기
    4) cum이 0 인지 판단하여 값 리턴하기
function solution(s){
    let cum = 0
    for (let paren of s) {
        cum += paren === '('? 1: -1
        if(cum < 0) {
            return false
        }
    }
    return cum === 0? true: false;
}
profile
새싹 개발자 지렁이의 벨로그입니다.

0개의 댓글