[codekata]Week2_Day3

문제

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

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

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

s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true


풀이

  1. 3종류의 괄호 쌍을 객체에 각각 키, 값으로 저장
  2. 인자로 받은 문자열의 길이가 홀수라면 유효할 수 있는 경우가 없으므로 우선 false 반환
  3. 문자열을 순회하면서 저장한 객체의 키로 접근 -> 바로 옆의 문자열이 그 키의 값과 같다면 유효한 괄호쌍이므로 true 반환
function isValid(s) {
  // 여기에 코드를 입력해주세요.
  const obj = {
    '(' : ')',
    '[' : ']',
    '{' : '}'
  }
  if (s.length % 2 !== 0) {
    return false;
  }

  for (let i = 0; i < s.length; i++) {
    if (obj[s[i]] = s[i+1]) {
      return true;
    } else return false;
  }
}


결과

Screenshot 2022-05-18 at 18.38.14.png


내 풀이에서는 s = "{[]}"(return true) 같은 케이스를 처리하지 못해서 여섯개 중 두 개의 테스트를 통과하지 못했다. 인자로 받은 문자열에 '()', '[]', '{}'이 있는지 각각 검사한 다음, 있다면 빈 문자열로 바꾸어놓고 최종적으로 빈 문자열이 남은 경우에만 true를 반환하는 식으로 다시 풀어볼 예정이다.