Code_Review 괄호짝찾기

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

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

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

s = "()"
return true

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

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true

<나의 코드>

isValid('(())[]')
 function isValid(s){
   let splitstring=s.split('')
   let obj=[];
   
  if (s.length===1){return false}
for(let i=0;i<splitstring.length-1;i++)
  {obj.push(splitstring[i]+splitstring[i+1])}
  
  console.log(obj);
  const table = ["(}","{)","[}","{]","(]","[)","]]"]
let a;
 for (let i in table){
    if(obj.indexOf(table[i])!==-1)
  {return false} 
  else{a= true}
 }
 return a
 }

요즘 table 만드는데 맛들려서, 테이블 배열 만들어주고.. 두개씩 끊어서 만든 obj배열의 값 중 table의 요소가 포함되어있으면 false, 아니면 a값을 true로 할당하여 최종적으로 a를 return 하도록 만들었다. 노가다인듯 아닌듯한 로직.. 그러나, 짝이 안맞는 모든 경우의 수가 6개 밖에 되지 않아서 그냥 이렇게 풀었다! for in 과 for of 가 여전히 헷깔리는데, 오늘 코드카타 하면서 (배열과 객체 각각에 접근하는 스킬)++!

function isValid(s) {
  let pairs = {
   "{" : "}",
   "(" : ")",
   "[" : "]"
 }
  let answer = [s[0]];
  for (i = 1; i <s.length; i++) {
    if ((pairs[answer[answer.length-1]]) === s[i]) {
      answer.pop();
    } else answer.push(s[i]);
  }
  return answer.length === 0
}

천재적인 동기분의 풀이: pairs객체를 만들어준 다음, answer의 마지막 요소의 value값이 s[i]와 같으면 answer인자를 하나씩 제거하는 식으로 열고 닫는 짝이 맞으면 pop을, 그렇지 않으면 push하여 최종적으로 answer.length가 0이면 true, 아니면 false 를 return한다. (상상도 못한 전개..)

좋은 웹페이지 즐겨찾기