알고리즘
백준 4949 균형잡힌 세상
킨글
2024. 9. 9. 20:46
설명
- [와 ] 이 쌍을 이루고, (와 )이 쌍을 이루는지 푸는 문제다.
- 단, [ ( ] ) 와 같이 되어 있을 때에 [ 뒤에는 ] 이 와야하고 ( 뒤에는 ) 이 와야 한다.
해당 [ ( ] ) 의 경우 (뒤에 ] 가 있어서 No이다. - Stack을 이용해서 [ 혹은 (이 있을 때에 Stack에 모두 넣었다.
- 만약 ] 혹은 )이 있을 때에 peek을 해서 ]이면 가장 위에 [이 있는지 확인하고, )이면 (이 있는지 확인하는 방식으로 진행한다.
- 주의점은 peek 할 때에 isEmpty를 체크해주지 않으면 null 에러난다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
// 4949
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
while(true) {
Stack<Character> c1 = new Stack<>();
String s = br.readLine();
if(".".equals(s)) {
break;
}
boolean isBalance = true;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(c == '(') {
c1.add(c);
} else if(c == ')') {
if(!c1.isEmpty() && c1.peek() == '(') {
c1.pop();
} else {
isBalance = false;
break;
}
} else if(c == '[') {
c1.add(c);
} else if(c == ']') {
if(!c1.isEmpty() && c1.peek() == '[') {
c1.pop();
} else {
isBalance = false;
break;
}
}
}
if(c1.isEmpty() && isBalance) {
bw.write("yes\n");
} else {
bw.write("no\n");
}
}
bw.flush();
bw.close();
br.close();
}
}