algorithm
[Algorithm] LeetCode 20. Valid Parentheses using Stack
tonirr
2020. 5. 30. 13:43
- 문제해석
- '(', ')', '{', '}', '[', ']' 의 characters 를 String 값으로 입력받아 페어가 맞는지 확인하여 맞으면 true, 틀리면 false를 반환한다.
- 처음 생각
- 처음에는 Stack의 Last-in-First-out 을 생각하지 못하고 Array 로 억지로 풀려고 했다.
- Stack을 정리한 적이 있었는데 코딩문제에서는 처음 접해본 듯 하다. 다음부턴 페어문제에서는 Stack을 고려해 보아야겠다.
- String을 Character array로 만들어주는 함수인 toCharArray()를 모르고 array를 하나씩 chatAt[i]해주면서 character로 변환해 주었다.
- 처음에는 Stack의 Last-in-First-out 을 생각하지 못하고 Array 로 억지로 풀려고 했다.
- 코드 해석
- Stack을 선언
- forEach문을 통해 String 값을 Character로 하나씩 변환하면서 입력받은 c로 switch문을 통해 닫히는 c를 하나씩 비교한다.
- ')'인 경우
- stack 이 비어있거나 '('가 아닌경우 false를 반환하면서 break로 switch 문을 종료한다.
- 위와 같은 방법으로 '}'와 ']'도 비교한다.
- ')', '}', ']'이 아닌 경우 default 로 stack에 넣는다.
- ')'인 경우
- for문이 끝났는데 stack이 비어있다면 '(', '{', '[' 등이 들어있는 것이므로 페어가 안맞아 false를 반환한다.
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for (Character c : s.toCharArray()) {
switch (c) {
case ')':
if (stack.isEmpty() || stack.pop() != '(')
return false;
break;
case '}':
if (stack.isEmpty() || stack.pop() != '{')
return false;
break;
case ']':
if (stack.isEmpty() || stack.pop() != '[')
return false;
break;
default:
stack.push(c);
}
}
return stack.isEmpty();
}
}