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를 반환한다.