티스토리 뷰

알고리즘

Baekjoon 9012 괄호 - Stack

kkoon9 2020. 10. 13. 20:04

 

더 깔끔한 노션을 원한다면

 

Baekjoon 9012 괄호 - Stack

Stack

www.notion.so

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

Stack

라이브 코딩에서 나올법한 문제이므로 다시 풀어보았다.

괄호가 올바른 괄호인지 확인하는 함수 : isVPS

private boolean isVPS(char[] PS, Stack<Character> stack) {
  for (int i = 0; i < PS.length; i++) {
    char ch = PS[i];
    if (ch == ')') {
      if (stack.isEmpty()) {
        return false;
      } else {
        stack.pop();
      }
    } else {
      stack.push('(');
    }
  }
  if (!stack.isEmpty()) {
    return false;
  }
  return true;
}

'(' 일 때에는 stack에 push해준다.

')' 일 때에는 stack이 비어있는지 확인한다.

  • stack 비어있다면 false를 리턴한다.

괄호 문자열이 끝났는데 stack이 비어있지 않다면 false를 리턴한다.

isRange 함수는 x, y값이 배열 범위에 벗어나는지 체크해준다.

방문했는지(visit), 같은 단지인지(map)를 확인해준 뒤, 재귀(DFS)를 돌려준다.

전체 코드

/**
 * @포인트 Stack 문제
 * @포인트 Stack은 '('만 넣고 ')'가 나올 때에는 pop만 해준다.
 * @포인트 stack이 비어있는지 확인해줘야 한다(isEmpty).
 */
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
  public static void main(String[] args) throws Exception {
    Baekjoon solution = new Baekjoon();
    solution.P9012();
  }
}

class Baekjoon {
  public void P9012() throws Exception {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    // StringTokenizer st = new StringTokenizer(br.readLine());
    Stack<Character> stack;
    int N = Integer.parseInt(br.readLine());
    for (int i = 0; i < N; i++) {
      stack = new Stack<>();
      char[] PS = br.readLine().toCharArray();
      if (isVPS(PS, stack)) {
        System.out.println("YES");
      } else {
        System.out.println("NO");
      }
    }
  }

  private boolean isVPS(char[] PS, Stack<Character> stack) {
    for (int i = 0; i < PS.length; i++) {
      char ch = PS[i];
      if (ch == ')') {
        if (stack.isEmpty()) {
          return false;
        } else {
          stack.pop();
        }
      } else {
        stack.push('(');
      }

    }
    if (!stack.isEmpty()) {
      return false;
    }
    return true;
  }
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함