안녕하세요

프로그래머스 JS [올바른 괄호] 스택/큐 본문

프로그래머스/Lv.2

프로그래머스 JS [올바른 괄호] 스택/큐

sakuraop 2022. 10. 27. 00:32

문제 설명

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

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

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

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

입출력 예sanswer
"()()" true
"(())()" true
")()(" false
"(()(" false
입출력 예 설명

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

 

 


 

제출한 답

function solution(s){
    let count = 0;
    for (let i=0; i<s.length; i++) {
//      +++ 4. "((((((((..." 가 가득한 문자열일 경우 for문을 절반까지만 시행합니다.
        if (count > s.length/2) return false
       
// 2. count가 -1이 되면 "("가 등장하지 않고, ")"가 나타난 것이므로 false를 반환합니다.
        if (count === -1) return false
       
// 1. for문으로 문자열에서 "(" 를 발견하면 count를 +1 하고, ")"를 발견하면 count를 -1합니다.
        s[i] === "(" ? count++ : count--;
    }
   
// 3. 모든 시행이 끝난 뒤 count가 0이면 남은 짝이 없는 것이므로 true를 반환하고 그렇지 않으면 false를 반환합니다.  
    return count === 0 ? true : false
}

// 1. for문으로 문자열에서 "(" 를 발견하면 count를 +1 하고, ")"를 발견하면 count를 -1합니다.
// 2. count가 -1이 되면 "("가 등장하지 않고, ")"가 나타난 것이므로 false를 반환합니다.
// 3. 모든 시행이 끝난 뒤 count가 0이면 남은 짝이 없는 것이므로 true를 반환하고 그렇지 않으면 false를 반환합니다.  
//      +++ 4. "((((((((..." 가 가득한 문자열일 경우 for문을 절반까지만 시행합니다.

시간 초과가 자꾸 발생하다 말다 하여서 특별케이스가 존재하는 것 같아 4번은 특별 케이스로 조건을 추가했습니다.