BOJ
[백준 4949번] 균형잡힌 세상 (java)
lotus lee
2019. 9. 21. 21:59
사용한 방법 : Stack
풀이 :
1. 왼쪽 소괄호 혹은 왼쪽 대괄호를 만나면 스택에 push한다.
2. 오른쪽 소괄호(오른쪽 대괄호)를 만났을 때, 스택의 맨 위의 문자가 왼쪽 소괄호(왼쪽 대괄호)가 아니면
균형잡힌 문자열이 아니다.
- 스택의 맨 위의 문자가 왼쪽 소괄호(왼쪽 대괄호)이면 pop한다.
- 스택의 맨 위의 문자가 왼쪽 소괄호(왼쪽 대괄호)가 아니면 균형잡힌 문자열이 아니므로 반복문을 빠져나간다.
- 스택이 비어있으면 오른쪽 소괄호(오른쪽 대괄호)를 넣는다.
3. 문자열의 길이만큼 반복문을 마쳤을 때 스택이 비어있으면 균형잡힌 문자열이고,
스택이 비어있지 않으면 균형잡힌 문자열이 아니다.
전체코드
package num4949;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
Stack<Character> s;
String str;
while (!(str = br.readLine()).equals(".")) {
s = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '(' || c == '[')
s.push(c);
else if (c == ')' || c == ']') {
if (!s.isEmpty()) {
char ch = s.peek();
if ((c == ')' && ch == '(') || (c == ']' && ch == '['))
s.pop();
else
break;
} else
s.push(c);
}
}
if (!s.isEmpty())
bw.write("no\n");
else
bw.write("yes\n");
}
bw.flush();
}
}