괄호
25 June 2019
문제 : https://www.acmicpc.net/problem/9012
이번은 주어진 문자열이 올바른 괄호열인지 판단하는 문제를 풀어보도록 하겠습니다.
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int size = sc.nextInt();
Stack stack = new Stack(50);
for (int i = 0; i < size; i++) {
String val = sc.next();
stack.init();
String ret = solve(stack, val);
System.out.println(ret);
}
}
private static String solve(Stack stack, String val) {
for (int k = 0; k < val.length(); k++) {
if (val.charAt(k) == '(') {
stack.push(1);
} else {
int ret = stack.pop();
if (ret == -1) {
return "NO";
}
}
}
if (stack.isEmpty()) {
return "YES";
} else {
return "NO";
}
}
}
class Stack {
private int top = -1;
private int[] queue;
Stack(int max) {
queue = new int[max];
}
void init() {
this.top = -1;
}
void push(int val) {
top++;
queue[top] = val;
}
int pop() {
if (top == -1) {
return -1;
}
int val = queue[top];
top--;
return val;
}
boolean isEmpty() {
return top == -1;
}
}
먼저 class를 통해 stack을 구현해주도록 합니다.들어오는 string의 값을 읽고, 각 char별로 '('가 들어온 경우는 stack에 push, ')'가 들어온 경우는 stack에 pop을 해줍니다.
이 경우, pop을 할 때 -1이 나오게 되면 앞뒤로 문자열이 맞지 않는 경우니, "NO"를 return 해주도록 합니다.
문자열의 모든 값 체크가 끝난 후, stack의 size가 0이면 "YES", 아닌 경우는 "NO"를 return해주도록 합니다.