고득점 Kit [스택/큐] - 올바른 괄호

세나정·2023년 5월 1일
0

문제

내 풀이

전형적인 stack, queue문제 하지만 늘 똑같이 풀다가 이상한 점을 한 가지 발견했다.
로직상으로도, 직접 한 개씩 넣어보아도 멀쩡한 코드인데 자꾸 효율성에서 시간 초과가 나왔는데 범인은 === 엄격한 비교 였다.

내 생각엔 문자열을 엄격한 비교시 더 많은 시간이 걸려서 그런가 (?) 라고 생각은 하는 중이다.

function solution(s){
    
    s = s.split('')
    let stack = [];
    
    if (s[0] == ")" || s[s.length-1] == "(" ) {
        return false
    } 
    
    if (s[0] == "(") { 
        stack.push(s[0])
        
        for (i=1; i<s.length; i++) {
            if (s[i] == "(")  {
                stack.push(s[i])
            } else if (s[i] == ")") {
                stack.pop()
            }
        }
    }
    
    
    
    return !stack.length ? true : false
}

다른 사람 풀이

매우 깔끔하고 특이한 코드를 보았다. 비록 stack을 활용한 것이 아니더라도 발상 자체가 깔끔하다.

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;
}

s의 각 값들이 ( 라면 1을 더해주고 아니라면 1을 빼주는데
총 결과가 맞아 떨어지지 않거나 cum의 값이 0이 된다면 false를 리턴하고 깔끔하게 0이 된다면 true를 반환한다.

profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글