thumbnail

[lv.2] 올바른 괄호 | 프로그래머스

[lv.2] 올바른 괄호 | 프로그래머스

📋 [ 프로그래머스 ] 시리즈 몰아보기 (17)

✏️ (lv.2) : 올바른 괄호

올바른 괄호란 '(' 로 시작하면 반드시 짝지어서 ')' 로 끝나는(닫히는) 문자를 뜻한다. 예를 들어

  • "()()" or "(())()" = true.
  • ")()(" or "(()(" = false. '(' 또는 ')' 로만 이루어진 문자열 s가 주어질 때, 문자열 s가 올바른 괄호인지 판별하는 solution을 작성하라.

  • s <= 100,000

  • s'(' 혹은 ')'로만 이루어져있다.


스택(stack) 자료형을 이용하여 문제를 해결할 수 있다. 프로그래머스에서 해당 문제를 스택을 이용해 풀이할 경우 시간초과에 유의해야한다.

  • s.length만큼 for문을 이용해 반복하며 로직을 수행한다.

  • s[i] == "("인 경우 해당 원소를 스택에 push한다.

  • 위의 조건을 만족하지 않는 경우 스택.peek()s[i]를 더하여 패턴이 일치하는지(temp == "()") 확인한다.

  • 일치할 경우 스택.pop(), 그렇지 않을 경우 스택.push(s[i])를 진행한다.

  • 스택.length() == 0일 경우 true, 그렇지 않을 경우 false를 return한다.

          
1 function solution(s) {
2 let answer = false;
3 let temp = "";
4 let stack = [];
5 for (let i = 0; i < s.length; i++) {
6 if (s[i] == "(") {
7 stack.push(s[i]);
8 } else {
9 temp = stack[stack.length - 1] + s[i];
10 if (temp == "()") {
11 stack.pop();
12 } else {
13 // s[i]를 push하는게 깔끔하지만 배열탐색에 시간이 할당되어 시간초과가 발생한다.
14 stack.push(s);
15 }
16 }
17 }
18 // 0은 false로도 간주되기에 해당 코드는 유효하다.
19 // stack.length == 0 를 조건으로 사용할 경우 시간초과가 발생한다.
20 if (!stack.length) {
21 answer = true;
22 }
23 return answer;
24 }
25
# 프로그래머스
# JS
# javascript
# 알고리즘
# 코딩테스트
# 스택

💡 로그인 하지 않아도 댓글을 등록할 수 있습니다!

👨‍💻 관련 포스트