[백준] 문제 4949번 : 균형잡힌 세상 - JAVA
2024. 11. 27. 16:16 - DoosanBaek
[링크] https://www.acmicpc.net/problem/4949
💎 문제 분석 & 제약 조건
문제 분석 :
어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램 작성
제약 조건 :
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며,
온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다.
입력의 종료조건으로 맨 마지막에 온점 하나(".")가 들어온다.
🚀 의사 결정
1. BufferedReader 로 문자열을 입력 받는다.
2. readLine() 으로 읽어온 값을 S 에 할당하고
3. 온점 . 이 나오면 입력이 끝난것으로 간주하고 종료
4. 괄호 균형 검사 메서드 실행 후, 결과 값 리턴에 따라 yes / no 출력
괄호 균형 검사 메서드
스택 사용, 여는 괄호인 경우 스택에 넣음
닫는 괄호인 경우,
1) 여는 괄호가 없으면 불균형으로 false return
2) 스택의 가장 위 문자와 비교해서 짝이 맞지 않으면 불균형, false 리턴
📜 소스코드(Java)
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;
}
// 괄호 균형 검사 결과 출력
if (checkResult(S)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
}
private static Boolean checkResult(String S) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < S.length(); i++) {
char ch = S.charAt(i);
// 여는 괄호인 경우 스택에 넣음
if (ch == '(' || ch == '[') {
stack.push(ch);
}
// 닫는 괄호인 경우
else if (ch == ')' || ch == ']') {
if (stack.isEmpty()) {
return false; // 닫는 괄호가 있지만 여는 괄호가 없으면 불균형
}
// 스택의 가장 위 문자와 비교해서 짝이 맞지 않으면 불균형
char top = stack.pop();
if ((ch == ')' && top != '(') || (ch == ']' && top != '[')) {
return false;
}
}
}
// 스택이 비어 있으면 균형이 맞는 것
return stack.isEmpty();
}
}
'알고리즘' 카테고리의 다른 글
[백준] 문제 12605번 : 단어 순서 뒤집기 - JAVA (0) | 2024.11.28 |
---|---|
[백준] 문제 17608번 : 막대기 - JAVA (0) | 2024.11.28 |
[백준] 문제 22252번 : 정보 상인 호석 - JAVA (0) | 2024.11.28 |
[백준] 문제 2504번 : 괄호의 값 - JAVA (0) | 2024.11.27 |
[백준] 문제 3986 번 : 좋은 단어 - JAVA (0) | 2024.11.27 |
[백준] 문제 10866번 : 덱 - JAVA (0) | 2024.11.27 |
[백준] 문제 27497번 - 알파벳 블록 - JAVA (0) | 2024.11.27 |
[백준] 문제 16120번 : PPAP - JAVA (0) | 2024.11.26 |