반응형
백준 Stack 문제입니다.
백준 9012 자바
백준 Stack 문제입니다. 간단할 수도 있지만 나름 구현해보려고 하면 시간이 좀 걸리는 문제입니다. 풀이 과정은 이렇습니다. 1. '('가 들어오면 Stack에 push 2.')'가 들어오면 Stack 안에 '('가 있으면 St
cj4789.tistory.com
4949번 문제보다 쉬운 문제가 9012번이니 저 문제를 참고하시면 금방 해결할 수 있습니다.
풀이 과정은 이러합니다.
1. '(' 또는 '[' 들어오면 Stack에 push
2. ')'가 들어오면 Stack이 비어있거나 (Stack이 비어있으면 뒤에 어떤 문자가 와도 )를 지울 수 없습니다.) 스택의 맨 윗 원소가 '('가 아니라면 바로 no 리턴
2-1. ')'가 들어왔을 때 위의 경우가 아니라면 Stack에서 pop (이 때 pop되는 문자는 Stack 안에 있던 '(' 입니다.)
Stack 안에 넣는 것은 '(', '[' 이고 ')', ']'는 Stack 안에 있는 여는 괄호들을 없애거나 바로 no를 return 시키는 역할을 합니다.
그래서 마지막에 Stack이 비어 있어야 yes를 출력할 수 있습니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String s = br.readLine();
if(s.equals(".")) break;
sb.append(sol(s)).append('\n');
}
System.out.println(sb);
}
public static String sol (String s) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '(' || c == '[') {
stack.push(c);
} else if( c == ')') {
if(stack.isEmpty() || stack.peek() != '(') {
return "no";
}
else {
stack.pop();
}
}
else if(c == ']') {
if(stack.isEmpty() || stack.peek() != '[') {
return "no";
} else {
stack.pop();
}
}
}
if(stack.isEmpty()) {
return "yes";
} else {
return "no";
}
}
}
반응형
'백준 > Data Structures' 카테고리의 다른 글
백준 17608 자바 (0) | 2022.08.23 |
---|---|
백준 2161 자바 (0) | 2022.08.22 |
백준 9012 자바 (0) | 2022.08.22 |
백준 10845 자바 (0) | 2022.08.19 |
백준 10828 자바 (0) | 2022.08.19 |