(알고리즘) 올바른 괄호

호두파파·2022년 1월 28일
0

알고리즘 연습

목록 보기
53/60


괄호가 입력되면 올바른 괄호이면 “YES", 올바르지 않으면 ”NO"를 출력합니다.
(())() 이것은 괄호의 쌍이 올바르게 위치하는 거지만, (()()))은 올바른 괄호가 아니다.

입력설명

첫 번째 줄에 괄호 문자열이 입력됩니다. 문자열의 최대 길이는 30이다.

출력설명

첫 번째 줄에 YES, NO를 출력한다.

입력예제 1

(()(()))(()

출력예제 1

NO


문제풀이

괄호는 닫는 괄호와 여는 괄호가 한 쌍일때 성립된다. 고로, 여는 괄호의 수와 닫는 괄호의 수가 일치하지 않는다면 No를, 일치한다면 Yes를 반환해주도록 코드를 작성했다.

let s1 = "(()(()))(()";
let s2 = "()";
console.log(solution(s1));
console.log(solution(s2));
 
function solution(s) {
  let answer = 'yes';
  let arr = s.split('');
  let sum = 0;
  
  for (let i = 0; i < arr.length; i++) {
    if (s.charAt(i) === '(') {
      sum++;
    } else {
      if (sum <= 0) {
        answer = 'No'
      } else {
        sum--;
      }
    }
  }
  sum === 0 ? answer = 'yes' : answer = 'no'
  return answer;
}


다른 문제풀이

function solution(s) {
  let answer = 'yes';
  let stack = [];
  if (s[0] === ')') answer = 'No';
  for (let x of s) {
    if (s === "(") {
      stack.push(s) // Stack에 열린 괄호를 쌓는다. 
    } 
    else if (s === ")") {
      stack.pop(); // 닫힌 괄호가 있다면, 배열의 맨 끝을 제거한다. 
    }
    // stack은 선입 후출의 원리로 프로세스가 진행되는 알고리즘을 말한다.
  }
  if (stack.length !== 0) {
    answer = 'No';
  }
  return answer;
}

stack은 쌓인 순서대로가 아니라, 가장 늦게 쌓인 순서대로 프로세스가 진행되는 알고리즘을 말한다.

profile
안녕하세요 주니어 프론트엔드 개발자 양윤성입니다.

0개의 댓글