코딩테스트/Programmers

올바른 괄호 (JS)

동띵 2022. 9. 13. 14:24

https://school.programmers.co.kr/learn/courses/30/lessons/12909

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(s){
    const arr = s.split('');
    let tmp = [];
    let answer = true;
    arr.map(char => {
        if (char === ')') {
            if (tmp.length === 0) {
                answer = false;
            } tmp.pop(); 
        }   
        else {
           tmp.push(char);
        }
    })
    if (tmp.length > 0) answer = false;
    return answer;
}

입력받은 문자열을 split을 사용하여 한 문자씩 나누어 배열을 만들었다.

그리고 괄호의 짝을 맞추기 위해 '('를 넣을 배열 tmp를 선언하고 

answer의 기본 값을 true로 주었다.


map을 사용해 arr를 돌면서 해당 문자가 ')'라면
tmp 배열의 길이를 확인하여 0이면 answer에 flase를,

아니라면 pop을 사용하여 짝을 이루는 마지막 요소 '('를 빼주었다.

그리고 해당 문자가 '('라면 tmp에 넣어주었다.

 

배열을 다 돈 후 tmp의 길이가 0보다 크다면
안에 괄호가 남아있는 것이므로 answer에 false를 넣어주었다.

마지막으로 answer를 반환해주었다.

 

=> 이 문제는 stack의 특징인 LIFO (Last In First Out)를 사용하는 문제이다.
만약 '('가 있다면 배열 tmp에 넣어주고,
')'가 있다면 tmp 안에 가장 마지막으로 들어간 '('와 짝이므로
pop을 사용해서 제거해가며 괄호의 짝을 체크하는 문제이다.

'코딩테스트 > Programmers' 카테고리의 다른 글

최빈값 구하기 (JS)  (0) 2022.12.04
이진 변환 반복하기 (JS)  (0) 2022.09.13
JadenCase 문자열 만들기 (JS)  (1) 2022.09.12
최댓값과 최솟값 (JS)  (1) 2022.09.12
최솟값 만들기 (JS)  (0) 2022.09.12