CodeKata # isValid

이선호·2021년 10월 3일

s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.

종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.

예를 들어 아래와 같습니다.

s = "()"
return true

s = "()[]{}"
return true

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

풀이

function isValid(s) {
const obj = {
  '{':3,
  '}':-3,
  '[':2,
  ']':-2,
  '(':1,
  ')':-1
}
const arr= [];
  for(let i=0; i< s.length; i++){
    if(obj[s[i]] > 0) {
      arr.push(obj[s[i]])
    }else {
      if(-obj[s[i]] === arr[arr.length-1]){
        arr.pop()
      }else {
        return false;
      }
    }
  }
  return !arr.length ? true : false ;
}

객체를 활용하여 왼쪽괄호와 오른쪽 괄호를 임의로 나눠준다.
빈배열을 만들어준뒤 반복문으로 인자를 돌면서 확인하고
조건으로 양수들의 괄호는 빈배열에 넣어주고
음수 괄호는 양수들을 넣은 배열 arr의 마지막 요소랑 비교해서
같으면 뒤부터 빠져나오게 한다.

arr이에 요소들이 다 빠지면 true 요소가 남아있으면 false

0개의 댓글