[프로그래머스] 올바른 괄호 (자바스크립트, JavaScript)

시작하며 🤟🏻

오늘은 올바른 괄호를 풀었어요!
간만에 공부한 스택이었는데, 괄호 문제를 오랜만에 봐서 좀 헷갈리긴 하더라구요. 그래도 침착하게 풀긴 했어요! 최근 알고리즘 공부한 보람이 있나봐요. 😘
그럼, 시작합니다!

풀이과정 📃

저는 보자마자 다음과 같이 생각했어요.

  1. 일단 괄호문제다. 스택의 냄새가 킁킁... 🐶
  2. 그렇다면 일단 예외를 잘 주시해보자! 일단 뒤가 '(' 나온 순간 탈락!
  3. 설사 (가 나온더라도 )가 있어야 한다. 따라서 )를 계속 세면서 주시하자!
  4. )를 세다가 (가 나오면 하나씩 카운트를 빼주자
  5. 마지막에 카운트가 없고, 끝까지 다 완주했다면 (while문이겠죠?!) true!

이렇게 생각했어요!
이를 코드로 표현하면 다음과 같답니다 :)

/*
    1. 일단 뒤쪽부터 pop을 한다.
    2. s가 무조건 맞다면, 일단 ) 앞에는 언젠가는 (가 무조건 와야 한다.
    3. 또한, 만약 (가 왔는데, )가 없다면 이 역시 틀린 답이다.
    4. 2~3을 만족한다면 올때까지 )가 나온 개수를 센다. 이때 (가 오면 count를 없앤다.
    5. 끝까지 실행. 만약 ) 개수가 0이 아니라면, 틀린 답!
*/ 

/*
    * 제한사항 
    1: 0 < s.length < 100000
    2: s는 '(' 또는 ')'로만 이루어짐. 
*/
const solution = s => {
    // cnt: 현재까지 pop됐지만 괄호를 찾지 못한 ')'의 개수
    let cnt = 0;
    let left = "("
    const sArr = s.split("");
    while(sArr.length) {
        // now: 현재 pop된 괄호.
        const now = sArr.pop();
        if (now === left && cnt === 0) return false;
        now === left ? cnt-- : cnt++;
    }
    return cnt === 0;
}

마치며😂

일단 괄호문제를 오랜만에 봤는데, 아직 감이 남아있다는 것에 감동... (거의 5개월된...)
얼른 다른 문제들도 풀고 싶네요. 화이팅!

좋은 웹페이지 즐겨찾기