Algorithm | Code Kata #8

Wook·2021년 12월 9일
0

Algorithm | Code Kata

목록 보기
8/21

괄호만으로 이루어진 문자열에서 위 예시의 false 경우처럼 문법에 맞지 않는 경우 falsereturn해주고, 문법에 맞을 경우 truereturn해주는 문제이다. false가 나오는 경우의 패턴에 대해 곰곰히 생각해보았을 때, 모든 경우에서 여는 괄호 다음 닫는 괄호가 나올 경우 짝이 맞지 않는 경우가 포함된다는 것이었다. (예시) '(}', '{)' 등등). 패턴을 찾았기에 해당 조건에 따라 문제를 풀 수 있었다.


📲 My Code

function isValid(s) {
  // 여기에 코드를 입력해주세요.

  // 각 괄호의 빈도수
  let sDic={
  "(":0,
  ")":0,
  "{":0,
  "}":0,
  "[":0,
  "]":0
  }


  let rightCase =[')',']','}'] // 닫는 괄호
  let allCase = ['(','[','{',')',']','}'] // 모든 괄호 (index가 3미만이면 여는 괄호, 3 이상이면 닫는 괄호이다.)

  // 객체에 해당 괄호의 나온 횟수 할당
  for (let index in s){ sDic[s[index]]+=1 }

  // 열고 닫는 괄호의 수가 서로 일치할 경우
  if ((sDic['(']===sDic[')']) 
  &&(sDic['[']===sDic[']'])
  &&(sDic['{']===sDic['}']))
  {
    for(let i=0; i<s.length; i++) // s의 모든 글자에 대하여,
    {
      for (let j=0; j<3; j++) // allCase에서 여는 괄호에 해당하는 index
      {
          // s[i]가 여는 괄호이면서, 다음 글자가 닫는 괄호이고, 짝이 이루지 않을 경우
          if((allCase[j]===s[i])&&rightCase.includes(s[i+1])
          &&(s[i+1]!==allCase[j+3])) 
          { return false; } 
      }
    } 
    return true; // 위의 경우가 하나도 없었을 경우, treu return
  }

  else return false; // 첫번째 조건문의 경우가 틀릴 경우(각 괄호의 짝이 맞지 않는 경우)
  
}

느낀 점

저번 문제를 풀때, 문제에서 요구하는 점이 무엇인지를 정확히 파악하는 것이 가장 빠른 길을 안내한다고 느꼈다. 그렇기에 문제를 5분 정도 들여다 보았고, false가 아닐 경우 모두 true를 return할테니 false인 경우에 패턴을 찾는것에 집중하였다. 알고리즘 문제를 푸는 다양한 방식이 있겠지만, 우선 내 접근법을 강화시켜야 다른 코딩 방법들을 익히더라도 더 숙련도 있게 알고리즘 실력을 늘릴 수 있겠다고 생각이 들었기 때문이다.
물론 다른 좋은 코드들도 보면서 다양하고 훨씬 더 좋은 방법들을 익히는 것도 매우 중요하다고 생각하고, 더 열심히 공부해야겠다.

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글