오늘은 올바른 괄호를 풀었어요!
간만에 공부한 스택이었는데, 괄호 문제를 오랜만에 봐서 좀 헷갈리긴 하더라구요. 그래도 침착하게 풀긴 했어요! 최근 알고리즘 공부한 보람이 있나봐요. 😘
그럼, 시작합니다!
저는 보자마자 다음과 같이 생각했어요.
- 일단 괄호문제다. 스택의 냄새가 킁킁... 🐶
- 그렇다면 일단 예외를 잘 주시해보자! 일단 뒤가 '(' 나온 순간 탈락!
- 설사 (가 나온더라도 )가 있어야 한다. 따라서 )를 계속 세면서 주시하자!
- )를 세다가 (가 나오면 하나씩 카운트를 빼주자
- 마지막에 카운트가 없고, 끝까지 다 완주했다면 (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개월된...)
얼른 다른 문제들도 풀고 싶네요. 화이팅!