[프로그래머스] level2 올바른 괄호

gonn-i·2024년 2월 14일
0
post-thumbnail

프로그래머스 LEVEL2 올바른 괄호

📚
문제링크

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.


제한사항
문자열 s의 길이 : 100,000 이하의 자연수
문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예
s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

입출력 예 설명
입출력 예 #1,2,3,4
문제의 예시와 같습니다.


접근 방향 설명 📍

정상적인 괄호쌍을 생각해보면, 여는 괄호 -> 닫는 괄호가 있어야 정상적인 괄호라고 볼 수 있다!

고로,

1) 여는 괄호가 먼저 있어야 함.
2) 닫는 괄호가 각 여는 괄호마다 한 개 있어야 함.

이러한 규칙을 조건문에 담으면 쉽게 풀리는 문제 🥳


풀이 코드 해석

function solution(s){ 
    const c = new Array(); // 여는 괄호 담을 배열 선언
    const t = s.split(''); // 문자열 하나씩 쪼개기
    

    for (let i =0; i < t.length; i++) {
        if(t[i] == '(') c.push(i); //여는 괄호 배열에 넣기 
        else { //만약 닫는 괄호가 여는 괄호보다 먼저 있는 경우 false 
            if (c.length === 0) return false
            c.pop() // 여는 괄호 + 닫는 괄호 오면 여는 괄호 내보내기 
        }
    }
    // 여는 괄호 배열이 텅 비면 (=닫는 괄호와 짝이 다 맞으면 true 출력)
    return c.length === 0
}

풀이 과정에서 새롭게 느낀점(배운점)

불필요한 변수를 난사하던 이전의 나
사실 answer를 선언해서 그 안에 true와 false를 넣고 마지막에 리턴해주는 코드를 짰는데 이게 진짜 필요해서 선언을 한건지, 더 짧고 간결하게 할 수는 없을까 고민해볼 수 있었던 문제였다

(앞으로는 짧고 간결한 코드 짜보자 😜)

0개의 댓글