[Java] SWEA 괄호 짝짓기 & 길찾기

Lee GaEun·2025년 5월 20일

[Java] 알고리즘

목록 보기
76/93

1218 괄호 짝짓기 문제 링크

#1


import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
import java.util.StringTokenizer;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        //Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T;
        T=10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = Integer.parseInt(br.readLine());
            String a = br.readLine();
            char b;
            int m1 = 0;
            int m2 = 0;
            int m3 = 0;
            int m4 = 0;
            for(int i=0; i<N; i++) {
                b = a.charAt(i);
                if(b=='(') {
                    m1++;
                } else if (b=='[') {
                    m2++;
                } else if (b=='{') {
                    m3++;
                } else if (b=='<') {
                    m4++;
                } else if (b==')') {
                    m1--;
                } else if (b==']') {
                    m2--;
                } else if (b=='}') {
                    m3--;
                } else if (b=='>') {
                    m4--;
                }
            }
            System.out.println("#"+test_case+" "+ (m1==0 && m2==0 && m3==0 && m4==0 ? 1 : 0));
        }
    }
}

  • 괄호 개수만 체크 했는데 풀렸음
  • (<)>, ()>< 같은 경우에는 1이 나와야 되는데 그거 고려 안 해도 그냥 통과됨..
  • 문제 의도는 그게 아니지 싶은데..

#2


import java.io.*;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
import java.util.StringTokenizer;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        //Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int T;
        T=10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            int N = Integer.parseInt(br.readLine());
            String a = br.readLine();
            Deque<Character> m = new ArrayDeque<>();
            char b, c;
            int answer = 1;
            for(int i=0; i<N; i++) {
                b = a.charAt(i);
                if(b=='(' || b=='[' || b=='{' || b=='<') {
                    m.addLast(b);
                }
                else {
                    if(m.isEmpty()) {
                        answer = 0;
                        break;
                    }
                    c = m.pollLast();
                    if (b == ')') {
                        if(c != '(') {
                            answer = 0;
                            break;
                        }
                    } else if (b == ']') {
                        if(c != '[') {
                            answer = 0;
                            break;
                        }
                    } else if (b == '}') {
                        if(c != '{') {
                            answer = 0;
                            break;
                        }
                    } else if (b == '>') {
                        if(c != '<') {
                            answer = 0;
                            break;
                        }
                    }
                }
            }
            System.out.println("#"+test_case+" "+ answer);
        }
    }
}

  • (<)>, ()>< 고려해서 다시 짜기는 했는데 테스트 케이스가 없어서 확실히 맞은 건지 모르겠네

1219 길찾기 문제 링크

#1


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.io.FileInputStream;

class Solution
{
    public static void main(String args[]) throws Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        //Scanner sc = new Scanner(System.in);
        int T;
        T=10;

        for(int test_case = 1; test_case <= T; test_case++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int N = Integer.parseInt(st.nextToken()); // 테스트 케이스 번호
            int C = Integer.parseInt(st.nextToken());
            st = new StringTokenizer(br.readLine());
            int a;
            int[][] arr = new int[2][100]; // 경로 최대 2개
            for(int i=0; i<C; i++) {
                a = Integer.parseInt(st.nextToken());
                if(arr[0][a] == 0) arr[0][a] = Integer.parseInt(st.nextToken()); // 경로 저장
                else arr[1][a] = Integer.parseInt(st.nextToken()); // 두 번째 경로 저장
            }

            boolean[][] visited = new boolean[2][100];
            //visited[0] = true;
            Deque<Integer> list = new ArrayDeque<>();
            list.add(0);
            int answer = 0;
            int now;
            while (!list.isEmpty()) {
                now = list.pollFirst();
                for(int i=0; i<2; i++) {
                    if(arr[i][now] != 0 && !visited[i][now]) {
                        if(arr[i][now] == 99) {
                            answer = 1;
                            break;
                        }
                        visited[i][now] = true;
                        list.addLast(arr[i][now]);
                    }
                }
            }
            System.out.println("#"+test_case+" "+answer);
        }
    }
}

  • bfs 알고리즘 대표 문제 느낌?
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글