Codility Java Brackets

업데이트:

문제

Link

코드

// you can also use imports, for example:
// import java.util.*;

// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");

import java.util.Stack;

class Solution {
  public int solution(String S) {
    Stack<Character> stack = new Stack<>();
    for (char c : S.toCharArray()) {
      switch (c) {
        case '(': case '{': case '[':
          stack.push(c);
          break;
        case ')':
          if (stack.size() == 0 || stack.pop() != '(') {
            return 0;
          }
          break;
        case '}':
          if (stack.size() == 0 || stack.pop() != '{') {
            return 0;
          }
          break;
        case ']':
          if (stack.size() == 0 || stack.pop() != '[') {
            return 0;
          }
          break;
      }
    }
    return stack.isEmpty() ? 1 : 0;
  }
}

설명

  1. 괄호 문자열을 임시 저장하기 위한 저장소로 Stack을 사용한다.
  2. 괄호 문자열의 시작 문자열(‘(‘, ‘{‘, ‘[‘)이 나올 경우 변수 stack에 저장한다.
  3. 괄호 문자열의 종료 문자열(‘)’, ‘}’, ‘]’)은 반드시 시작 문자열 이후에 나와야 하므로, 변수 stack의 크기가 0이거나 시작 문자열이 아닌 경우는 0을 주어진 문제의 결과로 반환한다.
  4. 반복이 완료되면 변수 stack이 비어있는지를 확인하여 비어있으면 1을, 비어있지 않으면 0을 주어진 문제의 결과로 반환한다.

결과

Link

소스

Sample Code는 여기에서 확인 가능합니다.

댓글남기기