Code Kata Day 8

SYhwang·2023년 2월 1일
0

코드카타

목록 보기
8/10

문제

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

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

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

s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

s = "[]{}"

풀이

function isValid(s) {

  const brackets = {
    '(': ')',
    '[': ']', 
    '{': '}' 
  }
  
  let opening = [];

  for(let i=0; i < s.length; i++) {
    if((s[i] === '(') || (s[i] === '{') || (s[i] === '[')) {
       opening.push(s[i])        
    } else {
       if(brackets[opening.pop()] !== s[i]) return false
    }
  }
  return opening.length === 0 ? true : false
}
  • 발상
  1. 여는 괄호와 닫는 괄호를 짝으로 한 객체를 선언한다.
  2. 문자열 s를 for 반복문 안에서 한 글자씩 접근하여 여는 괄호는 차례대로 opening 배열에 담는다.
  3. 닫는 괄호가 나왔을 때 opening 배열의 마지막 요소를 꺼내 검사하고, 둘의 짝이 맞으면(객체의 key-value 세트이면) 다음 반복으로 넘어간다. (안 맞으면 바로 false를 리턴한다)
  4. 짝이 맞는 괄호는 반복을 돌면서 opening 배열에서 지워져나가므로 반복문이 끝났을 때 opening 배열의 length가 0일 경우 true 일 것이다.

0개의 댓글