티스토리 뷰

알고리즘/코딩테스트 공부

6-1 올바른 괄호 (스택)

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 12. 10. 05:57

문제

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

풀이

function solution(s) {
  let answer = "YES";
  let stack = [];

  let first,
    last = "";
  (first = s[0]), (last = s[s.length - 1]);

  if (first !== "(" || last !== ")") return "NO";

  for (let x of s) {
    if (x === "(") stack.push(x);
    else {
      if (stack.length === 0) return "NO";
      stack.pop();
    }
    console.log(stack);
  }

  if (stack.length > 0) return "NO";

  return answer;
}

let a = "((((())())((())))(((((())(((()))))))()))))";
console.log(solution(a));

맨 앞과 맨 뒤의 요소를 탐색하여 맞는지 1차적으로 체크한 후 "(" 이 나온다면 push ")" 이 나오면 pop 을 해주어 문제를 풀었습니다.

다른 풀이

function solution(s) {
  let answer = "NO";
  let cnt = 0;
  let first,
    last = "";
  (first = s[0]), (last = s[s.length - 1]);
  console.log(first, last);

  if (first !== "(" || last !== ")") return "NO";

  for (let x of s) {
    //console.log(x);
    if (x === "(") cnt++;
    else cnt--;
  }

  console.log(cnt);
  if (cnt === 0) return "YES";
  return answer;
}

let a = ")()()()(";
console.log(solution(a));

개수를 세어 문제를 풀었습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함