[Java] SWEA 최장 경로 & 지명 선수

Lee GaEun·2025년 5월 22일

[Java] 알고리즘

목록 보기
80/93

2814 최장 경로 문제 링크

#1


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.HashMap;
import java.util.Scanner;
import java.io.FileInputStream;
import java.util.StringTokenizer;

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

        for(int test_case = 1; test_case <= T; test_case++)
        {
            StringTokenizer st = new StringTokenizer(br.readLine());
            N = Integer.parseInt(st.nextToken());
            int M = Integer.parseInt(st.nextToken());

            arr = new int[N+1][N+1];
            int a, b;
            for(int i=0; i<M; i++) {
                st = new StringTokenizer(br.readLine());
                a = Integer.parseInt(st.nextToken());
                b = Integer.parseInt(st.nextToken());
                arr[a][b] = 1;
                arr[b][a] = 1;
            }

            boolean[] visited;
            int count = 1;
            for(int i=1; i<=N; i++) {
                visited = new boolean[N+1];
                visited[i] = true;
                count = Math.max(dfs(i, 1, visited), count);
            }

            System.out.println("#"+test_case+" "+count);
        }
    }

    static int dfs(int i, int count, boolean[] visited) {
        int now = count;
        for(int a=1; a<=N; a++) {
            if (arr[i][a] == 1 && !visited[a]) {
                visited[a] = true;
                count = Math.max(dfs(a, now+1, visited), count);
                visited[a] = false;
            }
        }

        return count;
    }
}

  • 문제 설명도 좀 부실하고 테스크 케이스도 부실해서 좀 힘들었음

23791 지명 선수 문제 링크

#1


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

class Solution
{
    static int N;
    static int[] A;
    static int[] B;
    static char[] answer;
    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=Integer.parseInt(br.readLine());

        for(int test_case = 1; test_case <= T; test_case++)
        {
            N = Integer.parseInt(br.readLine());
            StringTokenizer st = new StringTokenizer(br.readLine());
            A = new int[N];
            B = new int[N];
            for(int i=0; i<N; i++) {
                A[i] = Integer.parseInt(st.nextToken());
            }
            st = new StringTokenizer(br.readLine());
            for(int i=0; i<N; i++) {
                B[i] = Integer.parseInt(st.nextToken());
            }

            answer = new char[N];
            for(int i=0; i<N; i++) {
                answer[i] = '0';
            }
            turnA(0);

            for(int i=0; i<N; i++) {
                bw.write(answer[i]+"");
            }
            bw.write("\n");
        }

        bw.flush();
        bw.close();
    }

    static void turnA(int level) {
        if(level==N) return;

        for(int i=0; i<N; i++) {
            if(answer[A[i]-1] == '0') {
                answer[A[i]-1] = 'A';
                turnB(level+1);
                break;
            }
        }
    }

    static void turnB(int level) {
        if(level==N) return;

        for(int i=0; i<N; i++) {
            if(answer[B[i]-1] == '0') {
                answer[B[i]-1] = 'B';
                turnA(level+1);
                break;
            }
        }
    }
}

  • 이것도 문제는 쉬운데 문제 설명을 해석하는 게,,
  • 들어오는 배열의 수가 우선순위인 줄 알고 풀었는데
  • 알고보니 들어오는 배열의 수는 선수의 이름(위치) 같은 거임
profile
I will give it my all (๑•̀o•́๑)ง

0개의 댓글