[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. 주어진 문자열을 순환한다.
  2. (+1sum에 누적한다.
  3. (-1sum에 누적한다.
  4. 누적된 값이 음수인 경우는 올바르지 않은 괄호이므로 false를 반환한다.
  5. 최종 누적된 sum이 0인지 진위값을 반환한다.

이 문제를 처음 보고 어떻게 접근할지 감이 잘 안와서 시간이 약간 걸렸습니다.

자료구조 공부가 부족한 탓일까요.

꾸준히 문제를 풀어야 하는 필요를 다시 한번 생각하게 됩니다.

문제 출처

  • 프로그래머스

Leave a comment