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
{
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
{
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;
}
}
}
}

- 이것도 문제는 쉬운데 문제 설명을 해석하는 게,,
- 들어오는 배열의 수가 우선순위인 줄 알고 풀었는데
- 알고보니 들어오는 배열의 수는 선수의 이름(위치) 같은 거임