반응형
문제
Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
- Open brackets must be closed by the same type of brackets.
- Open brackets must be closed in the correct order.
예시
Input: s = "()"
Output: true
Input: s = "()[]{}"
Output: true
Input: s = "([)]"
Output: false
Input: s = "{[]}"
Output: true
제약조건
- 1 <= s.length <= 104
- s consists of parentheses only '()[]{}'.
답안
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for(char brckt : s.toCharArray()){
if(brckt == '('){
stack.push(')');
}
else if(brckt == '{'){
stack.push('}');
}
else if(brckt == '['){
stack.push(']');
}
else if(stack.isEmpty() || stack.pop() != brckt){
return false;
}
}
return stack.isEmpty();
}
}
Stack 자료구조를 활용한다.
Stack은 일방향으로 데이터 삽입과 추출이 가능하다. 이를 LIFO(Last In First Out)이라 부르기도 한다.
만약 본인이 1,2,3 이라는 값을 순서대로 Stack에 할당했다면, 가장 마지막에 넣은 3 이라는 값에만 접근 가능하다.
배열의 값을 단순 비교 후 괄호의 짝이 맞으면 Stack에 넣는다.
for문 사용 시 인덱스를 활용할 일이 없기 때문에 확장 for문을 사용한다.
stack.pop() != brckt 코드를 통해 Stack안의 괄호가 서로 다른 경우 false를 리턴하도록 한다.
마지막으로 stack.isEmpty() 코드를 통해 Stack이 비어있는 여부를 boolean 값을 리턴하도록 한다.
반응형