올바른 괄호(level2)

원용현·2022년 8월 26일
0

프로그래머스

목록 보기
11/49

링크

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

문제

괄호의 문자열이 주어질 때 해당 괄호들이 올바르게 끝난 것인지 판별하는 함수를 작성하라.

예제로 이해

"((()()))" 과 같은 괄호의 문자열은 올바르게 끝마쳐진 괄호들이다.
"(()(" 과 같은 괄호의 문자열은 올바르지 않게 끝마쳐진 괄호들이다.

해당 문제를 해결하기 위한 방법은 괄호의 종류에 따라 카운트를 세면 된다.

여는 괄호에 대해서 카운트 + 1을 진행하고 닫는 괄호에 대해서 카운트 - 1을 진행하여 마지막에 카운트가 0이 아니라면 어디선가 여는 괄호 또는 닫는 괄호가 더 있다는 말이 되어 올바르게 끝나지 않은 괄호의 문자열이 되는 것이다.

여기서 예외를 적용하면 카운트를 세는 중간에 카운트의 값이 -가 되면 자동적으로 중간에 닫는 괄호가 많아 진 것으로 끝까지 다 세지 않아도 이미 틀린 문자열이 되므로 false를 반환하도록 한다.

코드

function solution(s){
    let count = 0
    
    for(let i = 0; i < s.length; i++) {
        if(s[i] === `(`) {
            count++
        } else {
            count--
        }
        
        if(count < 0) {
            return false
        }
    }
    
    if(count !== 0) return false
    else return true
}

코드 풀이

if(s[i] === `(`) {
  count++
} else {
  count--
}

if(count < 0) {
  return false
}

여는 괄호에 대해서 count++를 진행하고 닫는 괄호에 대해서 count--를 진행한다. count에 대한 계산이 끝나면 count가 -가 되는 경우에 대해 더 이상 진행할 필요가 없으므로 예외처리를 구현하여 함수가 종료되도록 한다.

if(count !== 0) return false
else return true

count의 값은 여는 괄호가 더 많으면 + 값이 될 것이고, 닫는 괄호가 더 많으면 - 값이 될 것이므로 0이 아닌 경우에 대해서 조건문을 실행한다. 0이 아니면 false를 반환하고 0인 경우에는 true를 반환한다.

0개의 댓글