[programmers 48] 올바른 괄호

박예슬·2022년 9월 6일
0

문제설명

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

"()()" 또는 "(())()" 는 올바른 괄호입니다.
")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

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

제한 사항

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

My solution

// 💡 문제 분석 💡
// 스택/큐 문제 : 스택 배열로 풀기
// in : 괄호로이루어진 문자열, out: 불린값
// `(`, 열린괄호만 들어가는 stack 배열만들고, `)` 닫힌괄호가 나오면 안에있는 열린괄호를 빼주기
// 1. 닫힌괄호가 있을때 스택배열이 빈상태면 false (빼낼 열린괄호가 없으니까)
// 2. 로직을 모두 수행했을때 스택배열에 요소가 있으면 false (짝지어 괄호가 닫히지 않았다는 의미)

function solution(s) {
    const stack = [];
    
    for (let i = 0; i < s.length; i++) {
        if (s[i] === `(`) {
            stack.push(s[i]);
        } else {
            if (stack.length === 0) return false;
            stack.pop();
        }
    }
    
    if (stack.length !== 0) return false;

    return true;
}

💻 문제 소요시간 : 문제해석, 방향찾기(10m) / 코드작성(5m)


큐/스택문제에서 제일 적게 풀었길래 마지막에 풀었는데 제일 쉬운문제였던거같다..



Others

function solution(s){
    let cum = 0
    for (let paren of s) {
        cum += paren === '('? 1: -1
        if(cum < 0) {
            return false
        }
    }
    return cum === 0? true: false;
}

배열을 굳이 만들지 않고, num으로 대체
이러면 push 와 pop 연산이 필요하지 않다!



Reference

profile
공부중인 개발자

0개의 댓글