[Hackerrank] Data Structures - Stack 풀이

예문


https://www.hackerrank.com/challenges/java-stack/problem


해석

  • Stack
  • bracket - ‘[]’, ‘{}’, ‘()’ 처럼 열고 닫는게 한쌍이다.
  • 쌍이 모두 맞으면 true 아니면 false 리턴

풀이

  • 방법 1. Stack 사용
    • push, pop 으로 최종적으로 stack에 남아있는게 있는지 확인
  • 방법 2. 정규식, replaceAll 사용
    • 쌍을 이루는 것은 모두 “” 공백으로 바꿈. 최종적으로 공백인지 아닌지 확인
      • ”[][{}({})]”
      • ”[()]”
      • ”[]”
      • ””

제약사항

코드

Stack 사용

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    while (sc.hasNext()) {
        String input = sc.next();
        Stack stack = new Stack();

        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if ('(' == c || '{' == c || '[' == c) {
                stack.push(input);
            } else {
                if (stack.isEmpty()) {
                    stack.push(input);
                    break;
                }
                stack.pop();
            }
        }

        if (stack.isEmpty()) {
            System.out.println("true");
        } else {
            System.out.println("false");
        }
    }
}

정규식, replaceAll 사용

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    String input = sc.next();
    while (input.length() != (input = input.replaceAll("\\(\\)|\\[\\]|\\{\\}", "")).length())
    System.out.println(input.isEmpty());
}