728x90
코드 힌트
- 입력 및 출력 처리:
- BufferedReader와 BufferedWriter를 사용하여 입력을 빠르게 읽고 출력을 효율적으로 처리합니다.
- 스택 사용:
- 스택의 역할: 괄호 문자열을 처리하기 위해 스택을 사용합니다. 열린 괄호는 스택에 쌓고, 닫는 괄호가 나오면 스택에서 열린 괄호를 제거합니다.
- 스택의 상태 확인: 스택이 비어있으면 모든 괄호가 올바르게 짝지어졌다는 의미입니다. 비어있지 않으면, 괄호가 잘못 짝지어진 것입니다.
- 문자열 처리:
- 문자 추출: 문자열에서 각 문자를 추출합니다.
- 문자 비교 및 스택 조작: 열린 괄호가 스택에 쌓이고, 닫는 괄호가 스택의 가장 위에 있는 열린 괄호와 쌍을 이루면 스택에서 제거합니다.
- 결과 판단:
- 모든 문자를 처리한 후, 스택이 비어 있으면 괄호 문자열이 올바르게 짝지어졌다는 것을 의미합니다. 그렇지 않으면, 잘못된 괄호 문자열로 간주합니다.
정답은 더보기 클릭
더보기
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
// 입력을 효율적으로 받기 위해 BufferedReader 사용
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 출력을 효율적으로 하기 위해 BufferedWriter 사용
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// 첫 번째 줄에서 테스트 케이스의 개수를 입력받음
int n = Integer.valueOf(br.readLine());
// 각 테스트 케이스를 처리
for (int i = 0; i < n; i++) {
// 스택 객체를 생성
Stack<String> stack = new Stack<>();
// 현재 테스트 케이스의 괄호 문자열을 입력받음
String input = br.readLine();
// 문자열의 각 문자에 대해 처리
for (int j = 0; j < input.length(); j++) {
// 현재 문자 추출
String s = "" + input.charAt(j);
// 스택이 비어있을 때는 현재 문자를 추가
if (stack.isEmpty()) {
stack.push(s);
continue;
}
// 스택의 맨 위에 있는 괄호와 현재 문자를 비교
// 여는 괄호 '('와 닫는 괄호 ')'가 쌍을 이루면, 스택에서 제거
if (stack.peek().equals("(") && s.equals(")")) {
stack.pop();
} else {
// 쌍이 이루어지지 않는 경우, 현재 문자를 스택에 추가
stack.push(s);
}
}
// 모든 문자를 처리한 후, 스택이 비어있으면 올바른 괄호 문자열
if (stack.isEmpty()) {
bw.write("YES\n");
} else {
// 스택이 비어있지 않으면 올바르지 않은 괄호 문자열
bw.write("NO\n");
}
}
// 출력 버퍼를 비우고 닫음
bw.flush();
bw.close();
}
}
728x90
'백준' 카테고리의 다른 글
[백준] OX퀴즈 8958번 (0) | 2024.08.14 |
---|---|
[백준] 더하기 사이클 1110번 (0) | 2024.08.14 |
[백준] 제로 10773번 (0) | 2024.08.08 |
[백준] 스택 2 28278번 (0) | 2024.08.08 |
[백준] 그림 1926번 (0) | 2024.07.31 |