CodeKata 08

hyounglee·2020년 9월 9일
0

Algorithm

목록 보기
8/23

문제

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

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

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

s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

답안

모델 답안

function isValid(s) {
  let matching = {
      '(': ')',
      '[': ']',
      '{': '}'
  };

  let closeArr = [];
  let openArr = [];
  let sArr = s.split('');
  let result = true;

  for (let i = 0; i < sArr.length; i++) {
      let thisStr = sArr[i];
      let closeForOpen = matching[thisStr];
      if (closeForOpen) {
        openArr.push(thisStr);
        closeArr.unshift(closeForOpen);
      } 
      else {
        if (thisStr === closeArr[0]) {
          closeArr.shift();
          openArr.pop();
        } else {
          result = false;
          break;
        }
      }
  }
  
  return result && closeArr.length === 0;
}

나의 답안

종택 타노스의 손길이 다분히 느껴지는 위의 코드.. 여윽시 타노스 코드를 반으로 접어버리셨다....... 아래가 재앙에 가까운 나의 코드다.

function isValid(s) {
  let sArr = s.split('');
  if (s.length % 2 === 0) {
    return checkArr(sArr);
  } else {
    return false;
  };
  
  function checkArr(sArr) {
    for (let i=0; i<sArr.length-1; i++) {
      if (sArr[i] === "(") {
        if ((sArr.indexOf(")")-i) % 2 === 1 || (sArr.lastIndexOf(")")-i) % 2 === 1) {
        } else { 
          return false;
        }
      } else if (sArr[i] === "[") { // [[]]
        if ((sArr.indexOf("]")-i) % 2 === 1 || (sArr.lastIndexOf("]")-i) % 2 === 1) {
        } else { 
          return false;
          }
      } else if (sArr[i] === "{") {
        if ((sArr.indexOf("}")-i) % 2 === 1 || (sArr.lastIndexOf("]")-i) % 2 === 1) {
        } else {
          return false;
          }
      } else if (sArr[0] === "}" || sArr[0] === "]" || sArr[0] === ")") {
        return false;
      }
    }
    return true;
  }
}
profile
(~˘▾˘)~♫•*¨*•.¸¸♪ ❝ 쉽게만 살아가면 재미없어 빙고 .ᐟ ❞ ꉂꉂ(ᵔᗜᵔ*) ✧ ♥️

2개의 댓글

comment-user-thumbnail
2020년 9월 9일

접다 말았다고도 적어줘야죠~

1개의 답글