728x90
<문제>
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
<풀이>
괄호 짝을 맞춰야 한다 -> 스택을 이용해서 풀어야 한다. (100%는 아님)
위 생각을 가지고 스택을 이용했다.
문자열을 입력받았을 때 내가 알고 싶은 건 괄호의 짝이 맞는지 확인하는 거기 때문에 일반 문자는 그냥 확인을 하지 않고 괄호만 확인한다.
만약 스택이 비어있는 상태에서 짝이 맞지 않는 ')' , ']'이 두 괄호가 들어오는 순간 더 이상 확인 안 하고 no를 출력하면 된다.
')', ']' 모양을 체크할때 스택의 최상단이 짝에 맞게끔 '(', '[' 이면 스택에 넣지 않고 스택을 pop을 진행한다.
'(' '[' 들어오면 무조건 push를 한다.
마지막줄까지 검사했을때 스택에 괄호가 남아있다면 no를 출력하고 스택이 비어있으면 yes를 출력한다.
<코드>
import java.util.*;
import java.io.*;
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;
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++) {
if(s.charAt(i) == '(' || s.charAt(i) == '['){
stack.push(s.charAt(i));
}
else if(s.charAt(i) == ')') {
if(stack.isEmpty() || stack.peek() != '(') {
stack.push(s.charAt(i));
break;
}
else if(stack.peek() == '(') stack.pop();
}
else if(s.charAt(i) == ']') { {
if(stack.isEmpty() || stack.peek() != '[') {
stack.push(s.charAt(i));
break;
}
}
if(stack.peek() == '[') stack.pop();
}
}
if(stack.isEmpty()) {
sb.append("yes").append("\n");
}
else {
sb.append("no").append("\n");
}
}
System.out.println(sb);
}
}728x90
'Algorithm > 백준 자바' 카테고리의 다른 글
| 백준 2636 치즈 (자바) (0) | 2024.02.29 |
|---|---|
| 백준 14502 연구소 (자바) (0) | 2024.02.29 |
| 백준 16234 자바 (0) | 2024.02.21 |
| 백준 2589 자바 (0) | 2024.02.21 |
| 백준 17298 자바 (0) | 2024.02.15 |