Programmers LEVEL2 | 올바른 괄호

NOWANDHERE·2021년 2월 12일
0

Algorithm

목록 보기
2/4

[Programmers LEVEL2] 연습문제 | 올바른 괄호


📗 문제 내용


[문제 링크]

https://programmers.co.kr/learn/courses/30/lessons/12909

[문제]

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어

  • ()() 또는 (())() 는 올바른 괄호입니다.
  • )()( 또는 (()( 는 올바르지 않은 괄호입니다.

'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 truereturn 하고, 올바르지 않은 괄호이면 falsereturn 하는 solution 함수를 완성해 주세요.

[제한 사항]

  • 문자열 s의 길이 : 100,000 이하의 자연수
  • 문자열 s'(' 또는 ')' 로만 이루어져 있습니다.

🧑🏼‍💻 나의 풀이


배열 answer와 인덱스 top을 선언하고, 문자열을 한 문자씩 확인하면서 현재 문자가 여는 괄호('(')이면 answer[++top]에 집어넣고 닫는 괄호(')')이면 pop() 한다.

문자를 하나씩 확인하는 과정에서 answer[top]에 여는 괄호가 들어있지 않다면 바로 false를 리턴하고, 마지막에도 top-1이 아니라면 false를 리턴했다.

function solution(s) {
  const answer = [];
  let top = -1;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === '(') {
      answer[++top] = s[i];
    } else {
      if (answer[top] === '(') {
        answer.pop();
        top -= 1;
      } else return false;
    }
  }
  if (top !== -1) return false;
  return true;
}

const s = '(())()';
console.log(solution(s)); // true

다른 사람의 풀이


괄호의 개수를 이용한 풀이

function solution(s) {
  let count = 0;
  for (let i = 0; i < s.length; i++) {
    s[i] === '(' ? count++ : count--;
    if (count < 0) return false;
  }
  if (count !== 0) return false;
  return true;
}

Reference

0개의 댓글