[문제링크]
https://www.acmicpc.net/problem/4949
[풀이]
1. 일단 한 줄 입력받는다.
2. 입력받은 줄이 "."이라면 종료(종료조건)
3. 스택을 선언한다
4. 문자열을 처음부터 끝까지 비교(.이 나오면 멈춤)
- 열린괄호 ( 또는 [ 이면 스택에 넣는다
- 닫힌괄호 ) 이라면
- 스택이 비어있다(짝이없다)거나 열린괄호가 아니라면 no
- 위 조건이 아니라면 pop
- 닫힌괄호 ] 이라면
- 스택이 비어있다(짝이없다)거나 열린괄호가 아니라면 no
- 위 조건이 아니라면 pop
5. 중간에 실패 없이 다 진행했을 때 stack이 비어있다면 yes, 비어있지 않다면 no를 출력한다.
import java.io.*;
import java.util.*;
public class stack004949 {
/**
* 스택: 4949
* 문제명: 균형잡힌 세상
*/
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = "";
while ((line = br.readLine()) != null) {
if(line.equals(".")) break;
Deque<Character> stack = new ArrayDeque<>();
boolean flag = true;
for(int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
if(c == '.') { // 입력의 종료조건
break;
}
if(c == '(' || c == '[') {
stack.push(c);
}
else if (c == ')'){
if(stack.isEmpty() || stack.peek() != '(') {
flag = false;
break;
}
stack.pop(); // 짝이 맞으면 pop
}
else if (c == ']') {
if(stack.isEmpty() || stack.peek() != '[') {
flag = false;
break;
}
stack.pop();// 짝이 맞으면 pop
}
}
if(flag && stack.isEmpty()) {
System.out.println("yes");
}
else {
System.out.println("no");
}
}
}
}
'codingTest > 백준' 카테고리의 다른 글
| [codingTest][백준] 큐2 (0) | 2026.01.25 |
|---|---|
| [codingTest][백준] 키로거📌 (0) | 2026.01.16 |
| [백준][DFS] 바이러스 (0) | 2025.10.08 |
| [백준] 스택(10828) (0) | 2023.03.08 |
| [백준] 11654번 아스키 코드 (0) | 2022.07.22 |