Stack, Queue(자료구조) - 0501. 올바른 괄호
private static String solution(String[] strArr) {
Stack<String> stack = new Stack<>();
for(String s : strArr) {
if(s.equals("(")) stack.push(s);
else if(!stack.empty()) stack.pop();
else return "NO";
}
if(!stack.empty()) return "NO";
return "YES";
}
private static String solution2(String[] strArr) {
int n = 0;
if(!strArr[0].equals("(") || !strArr[strArr.length - 1].equals(")"))
return "NO";
for(String s : strArr) {
if(s.equals("(")) n++;
else n--;
}
return n == 0 ? "YES" : "NO";
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] strArr = sc.nextLine().split("");
System.out.println(solution(strArr));
}
public String solution(String str){
String answer="YES";
Stack<Character> stack=new Stack<>();
for(char x : str.toCharArray()){
if(x=='(') stack.push(x);
else{
if(stack.isEmpty()) return "NO";
stack.pop();
}
}
if(!stack.isEmpty()) return "NO";
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str=kb.next();
System.out.println(T.solution(str));
}
해당 문제는 stack
을 이용하여 쉽게 풀 수 있다.
stack
후입선출(LIFO
, Last In First Out)의 특징을 갖고 있다.
나의 풀이의 solution2
에서는 스택을 쓰지 않고 구현하였다.