CodingTEST
[백준 4949] 균형잡힌 세상 (JAVA)
경걍
2023. 12. 5. 00:44
반응형
백준 4949번 문제 - 균형잡힌 세상
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
문제 분석
- 다음 규칙을 만족하면 yes 아니면 no 를 출력해라
- 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다.
- 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다.
- 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
- 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
- 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.
해결 키 포인트
- Deque로 열어져있는 괄호를 보관한다.
- '[' , '(' 일 경우 Deque에 문자 추가
- ']' , ')' 일 경우 Deque 끝에 있는 문자 확인
- Deque가 비어있거나 끝에 문자와 현재 닫혀지는 문자가 다른 경우 no 출력
- 마지막에 문자열 끝이 . 인지 확인
- s.charAt(s.length()-1) == '.'
코드
import java.awt.*;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String s = br.readLine();
if(s.equals(".")) break;
Deque<Character> lastPl = new LinkedList<>();
boolean isStringCheck = true;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
char check = ' ';
switch (c) {
case '[':
case '(':
lastPl.add(c);
break;
case ']':
check = '[';
break;
case ')':
check = '(';
break;
}
if(check != ' ' && (lastPl.isEmpty() || lastPl.pollLast() != check)) {
isStringCheck = false;
}
if(!isStringCheck)
break;
}
if(isStringCheck && lastPl.isEmpty() && s.charAt(s.length()-1) == '.') {
System.out.println("yes");
}
else {
System.out.println("no");
}
}
}
}
반응형