https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다
www.acmicpc.net
해석 및 팁
이 문제에서 균형 잡힌 문자열인지 아닌지를 판단하기 위해문장을 입력받을때 괄호를 구별하여 ']' 의 경우는 '['과 매칭되어야 하고, ')'의 경우는 '('과 매칭되어야 균형을 이루고 있으므로 여는 경우에는 Stack에 저장해 주고 닫는 경우에 Stack이 비어있지 않거나 매칭되는 경우에는 여는 괄호를 지워주고 아닌 경우에는 닫는 괄호를 Stack에 저장하면 됩니다. 최종적으로 Stack에 값이 남아있으면 균형을 이루지 못하는 경우입니다.
Java 코드
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(true) {
String str = sc.nextLine();
if(str.equals(".")) break;
Stack<Character> stack = new Stack<>();
for(int i = 0; i < str.length(); i++) {
char a = str.charAt(i);
if(a == '(' || a == '[') stack.push(a);
else if(a == ')') {
if(!stack.isEmpty() && stack.peek() == '(') stack.pop();
else stack.push(a);
}
else if(a == ']') {
if(!stack.isEmpty() && stack.peek() == '[') stack.pop();
else stack.push(a);
}
}
if(stack.isEmpty()) System.out.println("yes");
else System.out.println("no");
}
}
}
'백준' 카테고리의 다른 글
백준 1620 나는야 포켓몬 마스터 이다솜(Java) (1) | 2023.01.26 |
---|---|
백준 2217 로프(Java) (0) | 2023.01.26 |
백준 1764 듣보잡(Java) (0) | 2023.01.25 |
백준 10816 숫자 카드 2(Java) (0) | 2023.01.25 |
백준 1026 보물(Java) (0) | 2023.01.25 |