본문 바로가기
알고리즘/leetcode

[leetcode] 20. Valid Parentheses / JS Javascript 코드 , 풀이

by 질서정연_ 2022. 4. 6.

문제 제목

Valid Parentheses

 

문제 링크 

https://leetcode.com/problems/valid-parentheses/

 

Valid Parentheses - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 

코드

/**
 * @param {string} s
 * @return {boolean}
 */
 var isValid = function(s) {
    let A = [s[s.length-1]];
    
    for (let i =s.length-2; i>=0; i--){
        if(A.length==0){
            A.push(s[i]);
        }
        else{
            if(A[A.length-1].charCodeAt() - s[i].charCodeAt() == 2 || A[A.length-1].charCodeAt() - s[i].charCodeAt() == 1) {
                A.pop();
            } 
            else{
                A.push(s[i]);
            }
        }
    }
    if(A.length==0) return true;
    else {
        return false;
    }
};

 

풀기 전 생각

stack을 설명 할 때 교수님께서 이 예제를 예로 들어주셨다

그래서 stack을 써서 풀자고 생각했다 .

JS 에는 built-in 된 stack 모듈이 없어 array를 사용했다.

 

괄호를 비교 할 때 Map을 쓸 생각도 해 봤는데 어떻게 해야할지 잘 모르겠어서

그냥 () [] {} 괄호끼리 아스키코드로 바꾸면 1 이랑 2씩 차이난다는걸 알게돼서

 

element.charCodeAt() 으로 문자를 아스키코드로 바꾸어 괄호를 비교했다.

 

풀고 난 후 Discuss 본 후 생각

그리 좋은 풀이는 아니지만 또 나쁘지 않은 것 같기도 하다. O(n)으로 풀었으니 말이다.

아직 알고리즘을 많이 풀어보지 못해 어떤 방법이 더 효율적일지 생각하면서 풀기보다는 

생각 난 대로 정리해서 풀고 있어서 뭐가 더 효율적인지 잘 모르겠다. 풀다보면 점점 나아질거다.! 

Map으로 푸는 방법도 있으니 기회가 되면 그렇게도 풀어보자 

 

 

댓글