[伯俊]4949号均衡の世界/Java,Python
Baekjoon Online Judge
algorithm practice
-問題を逐次解く
18.スタック
スタックを実装して使用します.
Java/Python
4.バランスのとれた世界
4949号
かっこの種類が多い問題.
この問題は、前のカッコの問題(9012)よりもアップグレードされます.
9012に角カッコを追加し、条件を変更するだけです.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String str;
while(true) {
str = br.readLine();
if(str.equals(".")) { // 종료 조건문
break;
}
sb.append(solve(str)).append('\n');
}
System.out.println(sb);
}
public static String solve(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i); // i 번째 문자
if(c == '(' || c == '[') { // 여는 괄호 경우, 스택에 push
stack.push(c);
}else if(c == ')') { // 닫는 소괄호 경우
// 스택이 비어있거나 pop할 원소가 소괄호랑 매칭이 안되는 경우
if(stack.empty() || stack.peek() != '(') {
return "no";
}
else {
stack.pop();
}
}
else if(c == ']') {
// 스택이 비어있거나 pop할 원소가 대괄호랑 매칭이 안되는 경우
if(stack.empty() || stack.peek() != '[') {
return "no";
}
else {
stack.pop();
}
} // 그 외 문자는 상관 X
}
if(stack.empty()) {
return "yes";
}
else {
return "no";
}
}
}
while True:
s = input()
if s == '.':
break
stack = []
result = True
for c in s:
if c == '(' or c == '[':
stack.append(c)
elif c == ')':
if not stack or stack[-1] == '[':
result = False
break
elif stack[-1] == '(':
stack.pop()
elif c == ']':
if not stack or stack[-1] == '(':
result = False
break
elif stack[-1] == '[':
stack.pop()
if result == True and not stack:
print('yes')
else:
print('no')
Reference
この問題について([伯俊]4949号均衡の世界/Java,Python), 我々は、より多くの情報をここで見つけました https://velog.io/@jini_eun/백준-4949번-균형잡힌-세상-Java-Pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol