알고리즘 문제풀이 - 올바른 괄호

공부중인 개발자·2021년 9월 12일
0

알고리즘

목록 보기
20/63
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/12909

올바른 괄호

문제 설명

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

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

제한사항

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

입출력 예

sanswer
"()()"true
"(())()"true
")()("false
"(()("false

문제 풀이

function solution(s){
    var answer = true;
    let open = 0;
    let close = 0;
    if(s[0] === ")") return false;
    else if (s[s.length-1] === "(") return false;

    for (let i = 0; i<s.length; i++) {
        if(close > open) return false;
        s[i] === "(" ? open ++ : close ++
    }
    if(open !== close) return false;

    return answer;
}

먼저 예외 조건으로 s의 첫 문자가 ) 이거나 마지막 문자가(인 경우 false를 리턴해주고
반복문을 돌려서 )(보다 많아지면 false를 리턴해주고 문자가 (인 경우 open에 1을 더해주고 ) 인 경우 close 에 1을 더해준 뒤 마지막에 둘의 합이 같지 않다면 false 같다면 true를 리턴해줬다.

처음에

 if(s[0] === ")") return false;
 else if (s[s.length-1] === "(") return false;

이 예외문을 작성하지 않으니 효율성 테스트에서 실패를 했다.
예외 조건을 정하는 것도 알고리즘을 푸는데 중요한 조건 중 하나인 것 같다.

profile
열심히 공부하자

0개의 댓글