본문 바로가기

Algorithm(Javascript)

알고리즘 문제 8

 

function isValid(s) {
  // 여기에 코드를 입력해주세요.
  const splitStr = s.split('');
  let box = []
  for(const value of splitStr) {
    if(value === '[' || value ==='{' || value === '(') {
      box.push(value);
    } else {
      let popValue = box.pop()
      if(value ===']') {
        if(popValue !== '[') {
          return false
        } else if (value === ')') {
          if(popValue !== '(') {
            return false
          } else if (value === '}') {
            if(popValue !== '{') {
              return false
            }
          }
        }
      }
    }
  } if(box.length !== 0) {
    return false
  } return true
}

 

먼저 인자로 받은 문자열을 split을 분리해서 배열로 저장을하고 값을 저장할 빈 배열을 만들고 시작한다.

괄호를 하나씩 분리한 배열을 순회하면서 여는 괄호면 빈 박스에다가 넣어준다. 닫는 괄호가 들어오면 box에 가장 끝에 있는 값을

pop을 해주고 popValue변수에 저장을 해준다. 그러면서 뺀값과 닫는괄호가 짝이 맞는지 확인을해서 틀리면 false 리턴을 해준다.

배열 끝까지 테스트를 마치고 만약 box배열이 빈값이 아니라면 false를 리턴해준다. s가 ']'같은게 들어왔을때 검사하기 위한거다.

이 테스트를 다 통과하면 true를 반환해준다. 

 

예를 들어서 파라미터로 '{[]}' 가 들어오면 box배열에 [ '{', '[' ]에 들어가있고 그다음부터 닫는 괄호가 들어오니깐 검사를 한다.

']'가 들어오니깐 box배열의 끝값인 '['이 pop이되고 짝이 맞으니깐 다음껄 검사를 한다. box에 [ '{' ]들어 있고 다음도 닫는괄호인

' } '이고 box값 끝값인 ' { '이 pop이되고 짝이 맞는지 확인을 하게되는 과정이다.

 

'Algorithm(Javascript)' 카테고리의 다른 글

알고리즘 문제 10  (0) 2021.11.01
알고리즘 문제 9  (0) 2021.10.28
알고리즘 문제 7  (0) 2021.10.26
알고리즘 문제 6  (0) 2021.10.25
알고리즘 문제 5  (0) 2021.10.22