[Leetcode] Valid Parentheses

Hyodduru ·2022년 3월 23일
0

Algorithm

목록 보기
23/25
post-thumbnail

내가 생각한 로직

  1. stack이라는 빈 배열을 만든다.
  2. 받은 인자값으로 for문을 돌려 열린 괄호라면 stack에 넣어주고, 닫힌 괄호라면 stack에 가장 마지막에 들어간 아이템과 동일만 모양인지 확인하고 맞다면 배열에서 꺼내준다.(pop())
  3. 최종적으로 남은 stack의 길이가 0이라면 짝이 다 맞아서 없어진거니까 true를 return해주고 반대의 경우라면 false를 return해준다.

코드는 아래와 같다.

function isValid(s) {
  let stack = [];
  let answer = true;

  for(let x of s){
  if(x === ')'&& stack[stack.length -1] === '(') {
    stack.pop()        
  }else if(x === ']' && stack[stack.length -1] === '[' ){
    stack.pop();
  }else if(x === '}' && stack[stack.length -1] === '{'){
    stack.pop()
  }else{
       stack.push(x)}}
      
  if(stack.length !== 0) return false
    return answer
}

아 그리고..! 오늘도 신박한 방법을 알아냈다(!)

천재 용현님(?)의 풀이방법인데 아주 간단하고 신선하다,,,

function isValid(s) {
  for(let x of s){
       if(s.includes('[]')|| 
       s.includes('{}')|| 
       s.includes('()'))
      s= s.replace('()', '').replace('[]', '').replace('{}', '')
  }
   return !s.length
}

인자로 받은 s를 다 돌아주면서 s전체에 [], {}, () 가 있는지 확인을 하고 있으면 replace를 이용하여 빈문자열로 만들어준다.

그리고 !s.length를 return하여 s.length가 0이 된다면 true, 그렇지 않다면 false가 return되는 로직-!

아주 간단해,,,, 신박해,,,,,,, 생각해보면 알고리즘 풀 때 replace 써 볼 생각은 안 해 본 것 같다,,

🍯 마무리

세상은 넓고 천재는 많다(?)

profile
꾸준히 성장하기🦋 https://hyodduru.tistory.com/ 로 블로그 옮겼습니다

0개의 댓글