[programmers] Lv.2 올바른 괄호

suwoncityboyyy·2023년 3월 7일
0
post-thumbnail

문제 설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • "()()" 또는 "(())()" 는 올바른 괄호입니다.
  • ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

sanswer
"()()"true
"(())()"true
")()("false
"(()("false

입출력 예 설명

입출력 예 #1,2,3,4문제의 예시와 같습니다.

문제풀이

시도

function solution(s) {
  let cnt = 0;
  let arr = [...s];
  for (let i = 0; i < s.length; i++) {
    arr[i] === ")" ? cnt-- : cnt++;
  }
  return cnt === 0 ? true : false;
}

cnt 초기값 0으로 지정해준 후에 조건문으로 ")" 가 올 시에 후위연산자로 -값이 되게 하였다.
그래서 cnt 값이 0이 아니게 되면 false를 리턴하게 해주었다 하지만
테스트3에서 걸렸다. 이유는 0이 돼서 true에 성립되지만 첫글자가 ")"오면 안된다.
해결

function solution(s) {
  let cnt = 0;
  let arr = [...s];
  for (let i = 0; i < s.length; i++) {
    arr[i] === ")" ? cnt-- : cnt++;
    if (cnt < 0) {
      break;
    }
  }
  return cnt === 0 ? true : false;
}

추가로 if문을 달아서 cnt가 0 미만이면 바로 for문이 종료되게 하였고 종료되자마자 조건문으로 0이 아닐시 false가 리턴되게 로직을 짰다.

profile
주니어 개발자 기술노트

0개의 댓글