본문 바로가기
일반 학습/코딩 테스트

[프로그래머스] 올바른 괄호

by StelthPark 2022. 5. 2.

처리순서

풀이

문자열s가 )로 시작하면 바로 닫아버린거기 때문에 false를 리턴하고 아니라면 s길이만큼 for문을 돌리게 된다.

 

'('의 갯수와 ')'의 갯수를 헤아리면서 특정 변수에 카운트해주고 '('일때는 변수에 +1를 해주고 ')'일때는 -1를 해주게 되며 만약 시작변수값 0이 음수가 되면 ')'이 더 많아졌다는 것이므로 올바른 괄호가 아니게 된다. 이때는 false를 리턴해주면 된다. 만약 s길이를 다돌고 끝나게 되면 변수값이 0이어야 올바른괄호다 '('와 ')' 갯수가 일치한다는 것이다.

 

이전에 괄호 계산하는 문제보다 훨씬 쉬웠으나 복잡하게 생각했다. ')'가 처음나오면 그앞에 '('가 있는지 확인해주고 맞다면 splice해주고 다시 계산하고 하는방식을 썼더니 효율성에서 실패했다. 그냥 간단히 괄호만 카운팅해줘서 갯수만 비교하면 되는 문제였다.

 

function solution(s) {
  let answer = false;
  let opened = 0;
  
  if(s[0]===')') return false;

  for (let i = 0; i < s.length; i++) {
   if (s[i] === "(") opened++;
  else if (s[i] === ")") opened--;
   if (opened < 0) break;
  }
  
  if (opened === 0) {
    answer = true;
    return answer;
  }
  return answer;
}

댓글