[JS][프로그래머스LV2]올바른 괄호
Algorithm/Programmers

[JS][프로그래머스LV2]올바른 괄호

문제 번호

 

코딩테스트 연습 - 올바른 괄호

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

programmers.co.kr

 

 

알고리즘 분류

 

 

문제 풀이

 문제가 어렵진 않았으나 시간초과가 발생하는 정확한 원일을 발견하지 못하였다.

처음에는 Stack 자료구조를 사용하여 문제를 풀었는데 시간초과가 발생하였다. pop 과 push 메서드 때문에 발생한 문제로 생각하여 for문을 사용하여 괄호들을 카운트하는 방법으로 풀이를 진행하였는데 역시나 시간초과가 났다.

 그래서 검색을 진행해보던중 다음의 글을 발견하였다.

 

typeof vs equals(=== 혹은 ==) 속도 비교

http://typeofnan.blogspot.kr/2011/01/typeof-is-fast.html typeof NaN: "typeof " is fast ?...

blog.naver.com

그래서 === 를 == 로 바꿔주니 시간초과를 통과하였다.

 

그런데 질문게시판을 들여다보니 == 에서 ===로 바꾸어서 통과하신분도 계신다...............

그래서 나는 위의 글에 나온 설명대로 local 에서는 == 가 더 빠르다고 이해하기로 했다.

 

전체코드

function solution(s){
    var answer = 0;    
    
    for(let i=0; i<s.length; i++){        
       if(s[i] == '(')
           answer++;
        else
            answer--;
        
        if(answer < 0)
            return false;           
    }
    
    return answer === 0 ? true : false;
}

 

통과하지 못한 코드( 위의 코드에서 == 만 === 로 바꾸었다.)

function solution(s){
    var answer = 0;    
    
    for(let i=0; i<s.length; i++){        
       if(s[i] === '(')
           answer++;
        else
            answer--;
        
        if(answer < 0)
            return false;           
    }
    
    return answer === 0 ? true : false;
}

특이사항