본문 바로가기

백준

[백준] 괄호 9012번

728x90

코드 힌트

  1. 입력 및 출력 처리:
    • BufferedReader와 BufferedWriter를 사용하여 입력을 빠르게 읽고 출력을 효율적으로 처리합니다.
  2. 스택 사용:
    • 스택의 역할: 괄호 문자열을 처리하기 위해 스택을 사용합니다. 열린 괄호는 스택에 쌓고, 닫는 괄호가 나오면 스택에서 열린 괄호를 제거합니다.
    • 스택의 상태 확인: 스택이 비어있으면 모든 괄호가 올바르게 짝지어졌다는 의미입니다. 비어있지 않으면, 괄호가 잘못 짝지어진 것입니다.
  3. 문자열 처리:
    • 문자 추출: 문자열에서 각 문자를 추출합니다.
    • 문자 비교 및 스택 조작: 열린 괄호가 스택에 쌓이고, 닫는 괄호가 스택의 가장 위에 있는 열린 괄호와 쌍을 이루면 스택에서 제거합니다.
  4. 결과 판단:
    • 모든 문자를 처리한 후, 스택이 비어 있으면 괄호 문자열이 올바르게 짝지어졌다는 것을 의미합니다. 그렇지 않으면, 잘못된 괄호 문자열로 간주합니다.

 


정답은 더보기 클릭

더보기
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