728x90
스택을 이용하는 너무 간단한 문제
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
public class Stack_03 {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
boolean vpsFlag = true;
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
String str = br.readLine();
vpsFlag = vpsCheck(str);
if(vpsFlag) System.out.println("YES");
else System.out.println("NO");
}
}
public static boolean vpsCheck(String str) {
Stack<String> stack = new Stack();
boolean vpsFlag = true;
for (String s : str.split("")) {
if (s.equals("(")) {
stack.push(s);
} else { //닫힘 괄호이면
if (!stack.isEmpty()) { //스택이 비어있지 않으면 ( 빼는데
stack.pop();
} else { //스택이 비어있으면 짝이 안 맞음.
vpsFlag = false;
}
}
}
if (!stack.isEmpty()) {
vpsFlag = false;
}
return vpsFlag;
}
}
여기서 신경써줘야할 건 들어오는 문자가 다 끝났는데 스택이 비어있지 않을 경우 (==(가 남아있는 경우)
이 경우도 괄호 짝이 맞지 않는 것으로 판단해줘야함.
역시 문제는 풀수록 느는구나
예전에 이 비슷한 문제 풀었던 적이 있는데 그 때는 스택을 쓸 줄 몰라서 엄청나게 복잡하게 했던 것 같다.
좀 알고나서 이 문제를 스택으로 풀었을 땐 훨씬 복잡하게 풀었는데 지금은 코드가 훨씬 간결해 졌다.
다만 시간차이는 예전엔 출력에 StringBuilder를 써서 더 빨랐음.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
(백준/자바) 힌트문제1 05. 해시테이블 - 백준 10807번 문제 : 개수 세기 (0) | 2023.07.18 |
---|---|
(백준/자바) 힌트문제1 04. 비트연산자 - 백준 2830번 문제 : 행성 X3 (0) | 2023.07.18 |
(백준/자바) 1764번 문제 : 듣보잡 (0) | 2023.05.19 |
(백준/자바) 1620번 문제 : 나는야 포켓몬 마스터 이다솜 (0) | 2023.05.19 |
(백준/자바) 10815번 문제 : 숫자카드 (HashMap은 속도가 빠르다 !) (0) | 2023.05.19 |