WeCode Kata Day 8

luneah·2021년 12월 8일
0

WeCode Kata

목록 보기
8/20
post-thumbnail

문제

s는 여러 괄호들로 이루어진 String 인자이다. s가 유효한 표현인지 아닌지 true/false로 반환하라.

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

Ex)
s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

Thinking Algorithm

  1. s를 새로운 문자열로 반환
  2. 이중for문 사용
    ㄴ 첫번째 for문 arr.length/2 까지만 반복
    ㄴ 두번째 for문 arr.length-1 까지 반복
  3. arr[j] + arr[j+1] 가 다음과 같은 경우
    ❶ () ❷ {} ❸ [] → replace 사용해 공백으로 바꿔줌
  4. 만약 arr 가 빈 문자열이면 true 반환, 아니면 false 반환

Code

function isValid(s) {
  let arr = s.slice();

  for(let i=0; i<s.length/2; i++) {
    for(let j=0; j<s.length-1; j++){
      let match = arr[j] + arr[j+1];

      if(match==="()" || match==="{}" || match==="[]") {
        arr=arr.replace(arr[j], "").replace(arr[j+1], "");
      }
    }
  }
  if(arr==="") {
    return true;
  }
  else {
    return false;
  }
}

💬 s.slice() 하면 변한 게 없는데 왜 새로운 변수로 선언해주는가?
→ s로 풀게 되면 s의 값이 계속 변하게 되므로 오류가 생길 수 있다.

profile
하늘이의 개발 일기

0개의 댓글