백엔드를 공부하고 있다 보니 지금까지는 파이썬으로 문제를 풀어왔지만 자바 언어에 익숙해지기 위해서 PS 언어를 자바로 바꾸었다.
이 문제를 풀면서 공부한 자바 버퍼리더도 있다.
이미 알고 있는 자료구조인 스택을 이용해서 풀었고, 물론 이 문제는 이전에 파이썬으로 쉽게 풀었던 문제이다.
자바에서의 자료구조 이용에 익숙해지기 위해서 이 문제를 자바로 다시 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCases = Integer.parseInt(br.readLine());
for (int i = 0; i < testCases; i++) {
Stack<Character> psStack = new Stack<>();
String ps = br.readLine();
boolean answer = isTmp(i, psStack, ps);
if (answer == true) {
System.out.println("YES");
continue;
}
System.out.println("NO");
}
}
private static boolean isTmp(int i, Stack<Character> psStack, String ps) {
for (int j = 0; j < ps.length(); j++) {
if (ps.charAt(j) == '(') {
psStack.push(ps.charAt(j));
}
if (psStack.isEmpty() && ps.charAt(j) == ')') {
return false;
}
if (!psStack.isEmpty() && ps.charAt(j) == ')') {
psStack.pop();
}
}
if (psStack.isEmpty()) {
return true;
}
return false;
}
}
로직이나 알고리즘은 이미 풀었던 경험이 있고, 자료구조를 이용할 수 있다면 손쉽게 풀 수 있는 문제이다.
하지만, 문법의 장벽에 막혀서 문제를 푸는데 오래걸렸다.
처음에는 메인 메서드에 모든 로직을 때려넣었지만 큰 구조의 로직은 메서드화해서 따로 뺐다.
(인텔리제이의 자동 메서드화 기능을 이용해서 메서드의 이름이 맘에 들지 않는다.)
버퍼리더의 기능, 자바에서의 스택 이용 등을 공부할 수 있었다.