Develop/Algorithm

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

HongUniverse 2022. 8. 20. 14:19
반응형

✏️ 문제 

 

문제 설명

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

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

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

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

입출력 예

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

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


1) 시도 : 92.3점

function solution(s){
    //문자열 배열로 변경
    let sArray = [...s];
 
    //마지막이 (이면 무조건 false
    if(")" == sArray[0] || "(" == sArray[sArray.length - 1]){
        return false;
    }else{
        const result = sArray.filter(function(el, idx) {
          return el !== '(';
        });
        const result2 = sArray.filter(function(el, idx) {
          return el === '(';
        });

        if(result.length == result2.length){
            return true;
        }else{
            return false;
        }
    }
}

 

2) 다른 사람의 풀이 참고

function solution(s){
    let stackCount = 0;
    for (let i = 0; i < s.length; i++) {
        stackCount += s[i] === '(' ? 1 : -1;
        if (stackCount < 0) return false;
    }
    return stackCount === 0 ? true : false;
}

출처 : https://jsikim1.tistory.com/251

 

3) 셀프 피드백

틀린 이유가, '('와 ')'의 수만 같게 생각하는게아니라, '('의 수보다 ')'가 더 많아지는, 즉 닫히는 괄호가 먼저 더 많으면 안되므로 그걸 고려해줬어야 했다.

그리고 출처에서 센스있게 '(' 일시 1로 설정해주어 무조건 '('부터 시작해야되게 로직을 짰다. 

처음 해보는거라 첫 시도에는 코드가 굉장히 길어졌는데, 이렇게 배우면서 하면 많이 늘 것 같다. 또 첫 아이디어에 코드부터 짜지말고 다양한 경우의수를 생각해보고 오히려 급하지 않게 해야한다고 반성했다.

 

반응형