설명
Given a string containing just the characters '('
, ')'
, '{'
, '}'
, '['
and ']'
, determine if the input string is valid.
The brackets must close in the correct order, "()"
and "()[]{}"
are all valid but "(]"
and "([)]"
are not.
풀이
스택을 이용해서 풀었다. 열린 괄호와 닫힌 괄호의 쌍을 맞추어주면 되기 때문에 그것만 유의해주면 풀 수 있었다.
따로 자바 API에 내장된 스택 라이브러리를 쓰지 않고 직접 해당 Solution 클래스의 내부 클래스로 스택을 만들어서 풀어보았다.
Runtime : 12ms
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | class Solution { public boolean isValid(String s) { Stack stack = new Stack(); char openParenthness[] = {'(', '[', '{'}; char closeParenthness[] = {')', ']', '}'}; for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); for(int bIndex = 0; bIndex < 3; bIndex++){ if(c == openParenthness[bIndex]) stack.push(c); if(c == closeParenthness[bIndex]){ if(stack.size() == 0) return false; char openChar = stack.pop(); if(!(openChar == '(' && c == ')' || openChar == '[' && c == ']' || openChar == '{' && c == '}')) return false; } } } if(stack.size() >= 1) return false; return true; } class Stack{ char[]array; int capacity; int size; Stack(){ size = 0; capacity = 10; array = new char[capacity]; } void push(char c){ if(size < capacity){ array[size++] = c; return; } // size >= 10 resize(); array[size++] = c; } void resize(){ capacity = capacity + (capacity >> 1); array = Arrays.copyOf(array, capacity); } char pop(){ if(size <= 0){ System.out.println("배열 음수 값 반환"); System.exit(1); } return array[--size]; } int size(){ return size; } } } | cs |
Runtimes : 8ms
스택은 동일하게 구현했고 내부 내용을 약간 수정하였다.
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 31 32 33 34 35 36 37 | public boolean isValid(String s) { Stack stack = new Stack(); for(int i = 0; i < s.length(); i++){ char c = s.charAt(i); switch(c){ // 열린 괄호 case'(': stack.push(c); break; case'[': stack.push(c); break; case'{': stack.push(c); break; // 닫힌 괄호 default: if(stack.size() <= 0) return false; char anotherC = stack.pop(); if(anotherC == '(' && c == ')') break; if(anotherC == '[' && c == ']') break; if(anotherC == '{' && c == '}') break; return false; } } if(stack.size() >= 1) return false; return true; } | cs |
'Problem Solving & Algorithm > LeetCode' 카테고리의 다른 글
20200418 [leetcode] 언제까지 할 수 있을지 모르겠지만. (0) | 2020.07.14 |
---|---|
20180309 Merge Two Sorted Lists (0) | 2018.03.09 |
20180304 Count And Say (0) | 2018.03.04 |
20180303 Two Sum (0) | 2018.03.03 |