Code Kata#8 괄호 순서

Somi·2021년 7월 2일
0

CODE KATA

목록 보기
8/12
post-thumbnail

💁 문제분석

s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다. 한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.

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

🙈 나의 코드

function isValid(s) {
  // 여기에 코드를 입력해주세요.
   const obj = {
    "(" : 1,
    ")" : 1,
    "[" : 2,
    "]" : 2,
    "{" : 3,
    "}" : 3
  }
  const arr = s.split("").map((el)=>obj[el]);

  console.log(arr)
  for(let i = 0; i < arr.length; i++){
    if(arr[i] !== arr[i+1]){
      if([...arr].reverse() === arr){
        return true
      }else{
        return false
      }
    }else{
      return true
    }
  }
}

는.... fail...!!ㅠㅠㅠㅠ
결국 해결하지 못해 재상님께 도움을 요청했다.

👍 재상님의 코드

function isValid(s) {
  let obj = {
    (:),[:],{:}}
  let match = [s[0]]
  for(let i = 1 ; i < s.length ; i++){
    if(obj[match[match.length-1]] === s[i]){
      match.pop();
    } else {
      match.push(s[i]);
    }
  }
  return match.length === 0? true : false
}
console.log(isValid([{}()]))
//obj[‘[’] === s[1] -> ‘]’ === ‘{’ 틀리니까 추가
// match[‘[’, ‘{’]
//obj[‘{’] === s[2] -> ‘}’ === ‘}’ 같으니까 빼기
// match[‘[’]
//obj[‘[’] === s[3] -> ‘]’ === ‘(’ 틀리니까 추가
// match[‘[’, ‘(’]
//obj[‘(’] === s[4] -> ‘)’ === ‘)’ 같으니까 빼기
//match[‘[’]
//obj[‘[’] === s[5] -> ‘]’ === ‘]’ 같으니까 빼기
//match []
//match = [] 빈배열 됨.
module.exports = { isValid };

답을 보고도 이해하는데에 시간이 좀 걸렸다.
객체로 접근한 것은 같은데 아이디어 자체가 다른 느낌이었다...!
오늘도 재상님한테 많이 배우고 갑니당~~!

profile
인생은 즐거워٩( ᐛ )و

0개의 댓글