올바른 괄호
❔문제 설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
- "()()" 또는 "(())()" 는 올바른 괄호입니다.
- ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
제한사항
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.
풀이
- 괄호의 짝이 제대로인지 체크할 수 있는 변수 check 생성
- for문을 돌면서 여는 괄호일 때는 +1을, 닫는 괄호일 때는 -1을 해줌.
1) 이 때 -1후에 check값이 음수가 된다면 앞쪽에 닫는 괄호가 부족해 짝이 맞지 않게 되기 때문에 false를 리턴.
- for문을 수행한 후에 다시 한번 check 값을 확인하고, 0이라면(짝이 제대로 맞다면) true를, 아니라면 false 리턴.
ex
- ( ( ( ) ( ( ) ) ) 일 때
( ( ( → check + 3 = 3
) → check - 1 = 2
( ( → check + 2 = 4
) ) ) → check - 3 = 1
check = 1 ➡ false
- ) ( ) ( 일 때
) → check - 1 = -1 ➡ false
- ( ( ) ) ( ) 일 때
( ( → check + 2 = 2
) ) → check - 2 = 0
( → check + 1 = 1
) → check - 1 = 0
check = 0 ➡ true
function solution(s){
let check = 0
for(let i = 0; i < s.length; i++) {
if(s[i] == "(") {
check += 1
} else {
check -= 1
if(check < 0) return false
}
}
return check == 0 ? true : false
}
✔문제출처: 프로그래머스