programmers - 올바른 괄호

marafo·2020년 9월 10일
0
post-thumbnail

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

• ()() 또는 (())() 는 올바른 괄호입니다.
• )()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

• 문자열 s의 길이 : 100,000 이하의 자연수
• 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

function solution(s){
    let stack = [];
    let array;
    let i = 0;
    let left = '(';
    let right = ')';
    
    array = s.split('');
    
    while( i < array.length){
        if( stack.length === 0 ){
            if(array[i] !== right){
                stack.push(array[i]);
            }else{
                return false;
            }
        }else{
            if(stack[stack.length - 1] === left && array[i] === right ){
                stack.pop();
            }else{
                stack.push(array[i]);
            }
        }
        i++;
    }
    
    if( stack.length === 0){
        return true;
    }else{
        return false;
    }

}

1) stack이 비어 있을 때 ')'가 처음으로 들어오면 무조건 false를 반환한다.

2) stack 맨 위의 요소가 '('이고 stack에 넣으려는 요소가 ')'이면 넣지않고 stack에서 pop한다.

3) 그 이외엔 해당 array요소를 stack에 push

4) 마지막으로 stack이 비어 있으면 괄호가 정상적으로 매칭되었기 때문에 true, 남았으면 false

def solution(s):
    stack = []
    i = 0
    left = "("
    right = ")"
    
    while i < len(s):
        if len(stack) == 0:
            if s[i] != right:
                stack.append(s[i])
            else:
                return False
        else:
            if stack[len(stack) - 1] == left and s[i] == right:
                stack.pop()
            else:
                stack.append(s[i])
        
        i += 1

    if len(stack) == 0:
        return True
    else:
        return False
profile
프론트 개발자 준비

0개의 댓글