본문 바로가기
코딩 문제/프로그래머스 [ JavaScript ]

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

by CODESIGN 2022. 9. 27.

https://school.programmers.co.kr/learn/courses/30/lessons/12909?language=javascript 

 

프로그래머스

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

programmers.co.kr

 

 

문제 설명


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

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

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

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

 

 

입출력 예


s answer
"()()" true
"(())()" true
")()(" false
"(()(" false

 

 

입출력 예 설명


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

 

 

문제 풀이


s의 첫 시작이 ) 일 경우 false를 return 하게 했다.

for loop에서는 ( 일 경우  start에 1씩 더해주고 ) 일 경우 1씩 빼주었다. 이때, start가 1보다 같거나 더 큰 경우에만 빼주었다. 

마지막에 start 가 0일 경우는 괄호의 짝이 맞다는 의미 이므로 true를

0이 아닐 경우에는 괄호들의 짝이 맞지 않다는 의미 이므로 false를 return 했다. 

 

function solution(s) {
    var bracket = s.split("");
    var start = 0;

    if (bracket[0] == ")") {
        return false;
    }
    for (let i = 0; i < bracket.length; i++) {
        if (bracket[i] == "(") {
            start++;
        } else if (start >= 1 && bracket[i] == ")") {
            start--;
        }
    }
    return start == 0 ? true : false;
}

 

 

 

다른 풀이


이 코드에서도 ( 일 경우 1을 더하고 아닐 경우 1을 뺐다. 

내가 쓴 코드보다 훨씬 간결하고 효율적이다.

 

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;
}

 

 

 

반응형

댓글