[Lv 2] 올바른 괄호
📄 문제
괄호가 바르게 짝지어졌다는 것은 ‘(‘ 문자로 열렸으면 반드시 짝지어서 ‘)’ 문자로 닫혀야 한다는 뜻입니다. 예를 들어
”()()” 또는 “(())()” 는 올바른 괄호입니다. “)()(“ 또는 “(()(“ 는 올바르지 않은 괄호입니다. ‘(‘ 또는 ‘)’ 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.
- 문자열 s의 길이 : 100,000 이하의 자연수
- 문자열 s는 ‘(‘ 또는 ‘)’ 로만 이루어져 있습니다.
🙋♀️ 나의 풀이
function solution(s) {
let sum = 0;
for (let i = 0; i < s.length; i++) {
// 1
if (s[i] === "(") sum += 1; // 2
if (s[i] === ")") sum -= 1; // 3
if (sum < 0) return false; // 4
}
return sum === 0; // 5
}
제가 생각한 풀이는 이렇습니다.
- 주어진 문자열을 순환한다.
(
은+1
을sum
에 누적한다.(
은-1
을sum
에 누적한다.- 누적된 값이 음수인 경우는 올바르지 않은 괄호이므로
false
를 반환한다. - 최종 누적된
sum
이 0인지 진위값을 반환한다.
이 문제를 처음 보고 어떻게 접근할지 감이 잘 안와서 시간이 약간 걸렸습니다.
자료구조 공부가 부족한 탓일까요.
꾸준히 문제를 풀어야 하는 필요를 다시 한번 생각하게 됩니다.
문제 출처
- 프로그래머스
Leave a comment