(JS)프로그래머스 올바른 괄호 난 왜 스택을 몰랐는가?
개발자 부트캠프도 이제는 시험을 보고 들어간다. 이제 과포화가 되었다는 방증이다. 이미 난 이전에 코드 스테이츠와 패스트캠퍼스를 떨어져서 몸소 실감하였다. 새삼 다시 취업이 정말 힘들어졌구나를 느낀다. 이미 부트캠프도 전공자나 관련 학과 지원자들이 자리를 차지하게 된 것 같다. 나에게 남은 것은 프로그래머스와 엘리스 트랙인데 잘 준비해서 수강할 수 있었으면 좋겠다.
이전까지는 코테를 파이썬으로 풀었는데 이제 걍 JS로 풀고 있다. 어차피 프론트엔드는 JS 실력인 만큼 JS에 모든걸 쏟아 붙겠다는 생각 때문이었다. 그리고 나서 쭉 풀어보려고하는데 0레벨은 풀 수 있었는데 1레벨부터 참 막히는 부분이 많았다. 벌서 막히면 안되는데 왜그런걸까.... 정말 못풀 때마다 좌절감을 많이 느끼는데 이 것도 과정의 일부라고 생각하고 참고 견디어 나가겠다. 이번에 막힌 문제는 올바른 괄호이다.
사실 이 문제 해설을 보면 다들 스택을 많이 언급했는데 그 누구도 스택이 뭔지 이야기해주지 않아서 비전공자는 눈물을 훔쳤다. 스택은 간단하게 말하면 후입선출이다. 기다란 통에 물건을 쌓으면 꺼낼 때는 가장 마지막에 올린 물건을 처음 꺼낼 수 있다. 그게 스택형 자료구조이다. 영어 단어 자체로도 쌓는다는 의미이다. 근데 막상 문제를 풀어보면 스택의 개념이 그리 중요했나 싶다. 규칙을 파악하고 어떻게 false 케이스를 걸러낼 기준을 만들어내는 것이 중요했다.
function solution(s){
let Count = 0;
for (let i = 0; i < s.length; i++) {
Count += s[i] === '(' ? 1 : -1;
if (stackCount < 0) return false;
}
return Count === 0 ? true : false;
}
처음 문제를 접했을 때 뭔가 넣고 판별하고 맞으면 삭제하는 그림을 그리긴 했는데 포인트를 잘못 잡았던 것 같다. 일단 (의 개수와 )의 수개가 같아야한다고 생각했고 근데 )()( 같은 경우를 어떻게 걸러야할지 몰라서 해맸다. 위 방법은 점수를 매겨서 닫는 괄호가 먼저 나오는 경우를 음수로 연결시켜 false 케이스를 걸렸다. 답변을 보면 정말 신기하다는 생각이 들고 한 편으로는 못 풀때의 막막함이 너무 괴로운데 더 어려운 문제를 어떻게 풀어야하는지 막막하지만 하다. 하지만, 다시금 마음을 편안하게 하고 이 것 역시 과정이라고 생각하기한다.