[문제 링크]
https://school.programmers.co.kr/learn/courses/30/lessons/12909
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 사고]
주어진 문자열이 주어진 조건에 부합한지 여부에 따라 Boolean 값을 반환한다.
[문제 해결]
1. s로 주어진 문자열을 split하여 분리한다.
2. 임의의 변수 num을 선언 후 0을 할당한다.
3. 문자열의 길이만큼 반복문을 순회하며 요소가 "("일 경우 num을 1 증가하고, ")"일 경우 num을 1 감소한다.
4. 반복문 내에 조건에 맞게 num의 값을 변경함에 더하여 num의 값이 음수가 되는 경우 ")"가 먼저 나온 경우이므로 false 값을 return 하도록 한다.
5. 반복문을 모두 순회한 후 num의 값이 0인 경우 쌍이 알맞은 경우이므로 true를 반환하고, num의 값이 0이 아닌 경우 쌍이 알맞지 않기 때문에 삼항연산자를 통해 false를 반환하도록 한다.
[작성 코드]
function solution(s){
const word = s.split('');
let num = 0;
for(let i = 0; i< word.length; i++){
if(word[i] === "(") num++;
if(word[i] === ")") num--;
if(num < 0) return false
}
return num === 0 ? true : false;
}
[문제 회고]
문제 자체의 주제는 스택과 큐 개념이였지만 굳이 배열을 선언하여 요소를 push,pop 하면서 불필요한 작업을 하지 않고 임의의 숫자 변수를 조작하여 문제를 해결하였다. 스택과 큐에 대한 개념은 알고 있기 때문에 이번 문제는 넘어가도록 한다.