Algorithm/백준
[Java][백준] 4949번 균형잡힌 세상
jisu-jeong0
2024. 4. 12. 17:43
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
입력
So when I die (the [first] I will see in (heaven) is a score list).
[ first in ] ( first out ).
Half Moon tonight (At least it is better than no Moon at all].
A rope may form )( a trail in a maze.
Help( I[m being held prisoner in a fortune cookie factory)].
([ (([( [ ] ) ( ) (( ))] )) ]).
.
.
출력
yes
yes
no
no
no
yes
yes
아이디어
문제를 깊이 읽지 않아도 알 수 있다. 스택으로 풀면 된다!
- 각 괄호는 짝이 맞아야 한다.
- 온점이 나오면 반복문을 종료한다.
- 스택이 비어있다면 "yes", 비어있지 않다면 "no"를 출력한다.
주요 코드
1. 반복문 구현
while (true) {
String str = br.readLine();
if (str.equals(".")) break;
Stack<String> stack = new Stack<>();
입력된 값을 line 단위로 받는다. 이때 입력 값에 "."이 있다면 반복문을 종료한다.
2. 입력된 각 문자를 비교
String[] sentence = str.split("");
for(String word : sentence){
switch (word) {
case ("("):
case ("["):
stack.push(word);
break;
case (")"):
if(!stack.isEmpty() && stack.peek().equals("("))
stack.pop();
else stack.push(")");
break;
case ("]"):
if(!stack.isEmpty() && stack.peek().equals("["))
stack.pop();
else stack.push("]");
break;
}
}
공백으로 구분하여 한 문자씩 반복문을 수행한다.
- "(" 나 "[" 인 경우 : 스택에 해당 문자를 넣어준다.
- ")" 인 경우:
- 스택이 비어있지 않고, 가장 최근 값이 "(" : 최근 값을 꺼내준다.
- 아니라면 ")" 을 스택에 넣는다.
- "]" 인 경우:
- 스택이 비어있지 않고, 가장 최근 값이 "[" : 최근 값을 꺼내준다.
- 아니라면 "]" 을 스택에 넣는다
3. stack 내부 확인
if (stack.empty()){
sb.append("yes").append('\n');
} else {
sb.append("no").append('\n');
}
반복문 종료 후 스택이 비어있다면 yes, 비어있지 않다면 no를 출력한다.
전체 코드
더보기
import java.io.*;
import java.util.Stack;
public class BJ_4949 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
while (true) {
String str = br.readLine();
if (str.equals(".")) break;
Stack<String> stack = new Stack<>();
String[] sentence = str.split("");
for(String word : sentence){
switch (word) {
case ("("):
case ("["):
stack.push(word);
break;
case (")"):
if(!stack.isEmpty() && stack.peek().equals("("))
stack.pop();
else stack.push(")");
break;
case ("]"):
if(!stack.isEmpty() && stack.peek().equals("["))
stack.pop();
else stack.push("]");
break;
}
}
if (stack.empty()) {
sb.append("yes").append('\n');
} else {
sb.append("no").append('\n');
}
}
System.out.println(sb);
}
}