문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
주어진 문자열 s는 오직 '(', ')', '{', '}', '[', ']' 문자들만 포함하고 있고, 입력된 문자열이 유효한지 결정해라.
입력된 문자열이 유효한 조건이다.
#1
Input: s = "()"
Output: true
#2
Input: s = "()[]{}"
Output: true
#3
Input: s = "(]"
Output: false
#4
Input: s = "([])"
Output: true
스택을 사용하면 문제를 쉽게 해결할 수 있다. 반복문을 통해 열림 괄호를 만나면 스택에 담고 닫힘 괄호를 만나면 스택에서 같은 타입인 열림괄호인지 확인하고 스택에서 빼주면 된다. 그리고 스택이 비어있는지 여부를 반환하면 된다.
public class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] va = s.toCharArray();
for (char c : va) {
if(stack.isEmpty()) {
stack.push(c);
} else if (c == ')' && stack.peek() == '(') {
stack.pop();
} else if (c == ']' && stack.peek() == '[') {
stack.pop();
} else if (c == '}' && stack.peek() == '{') {
stack.pop();
} else {
stack.push(c);
}
}
return stack.isEmpty();
}
}