반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[SWEA/Java] 1218. 괄호 짝짓기 본문

SW Expert Academy/D4

[SWEA/Java] 1218. 괄호 짝짓기

ImJay 2024. 2. 4. 17:11
반응형

[SWEA/Java] 1218. 괄호 짝짓기

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


풀이

package edu.ssafy.im.SWEA.D4.No1218;

import java.io.*;
import java.util.Stack;

public class Solution {
    int n;

    public static void main(String[] args) throws IOException {
        new Solution().io();
    }

    private void io() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();

        for (int t = 1; t <= 10; t++) {
            n = Integer.parseInt(br.readLine()); // 테스트케이스의 길이 입력

            String string = br.readLine(); // 테스트케이스 문자열 입력
            int ans = sol(string); // 유효성 검사 메서드 호출

            sb.append("#").append(t).append(" ").append(ans).append("\n"); // 결과 문자열 생성
        }

        bw.write(sb.toString()); // 결과 출력
        bw.flush();
        bw.close();
    }

    private int sol(String string) {
        Stack<Character> stack = new Stack<>(); // 스택 생성
        for (int i = 0; i < n; i++) { // 문자열의 각 문자에 대해 반복
            char c = string.charAt(i); // 문자 추출

            if (c == '{' || c == '[' || c == '(' || c == '<') { // 여는 괄호인 경우
                stack.push(c); // 스택에 추가
            } else { // 닫는 괄호인 경우
                // 짝이 맞는 여는 괄호인지 검사하여 스택의 맨 위에 있는 괄호와 짝이 맞는지 확인
                switch (c) {
                    case '}':
                        if (stack.peek() == '{') {
                            stack.pop(); // 짝이 맞으면 스택에서 제거
                            break;
                        } else {
                            return 0; // 짝이 맞지 않으면 유효하지 않음 반환
                        }
                    case ']':
                        if (stack.peek() == '[') {
                            stack.pop(); // 짝이 맞으면 스택에서 제거
                            break;
                        } else {
                            return 0; // 짝이 맞지 않으면 유효하지 않음 반환
                        }

                    case ')':
                        if (stack.peek() == '(') {
                            stack.pop(); // 짝이 맞으면 스택에서 제거
                            break;
                        } else {
                            return 0; // 짝이 맞지 않으면 유효하지 않음 반환
                        }
                    case '>':
                        if (stack.peek() == '<') {
                            stack.pop(); // 짝이 맞으면 스택에서 제거
                            break;
                        } else {
                            return 0; // 짝이 맞지 않으면 유효하지 않음 반환
                        }
                }
            }
        }

        // 모든 문자 검사 후에도 스택이 비어있지 않으면 짝이 맞지 않는 괄호가 남아있음
        if (!stack.isEmpty())
            return 0; // 유효하지 않음 반환

        return 1; // 모든 검사를 통과하면 유효함 반환
    }
}
반응형
Comments