https://swexpertacademy.com/main/code/problem/problemDetail.do
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
접근 방법
이 문제를 풀면서 DFS와 백트래킹에 대해 이해했다.
둘 다 완전 탐색이지만 백트래킹은 가지치기를 한다는 점에서 차이가 있다. (N-Queen, 배낭 문제, 순열/조합)
Array 안에 ArrayList를 저장하는 구조를 사용했다.
재귀 함수가 check를 참고하여 일을 마치고 오면 check를 원 상태로 되돌리는 과정이 2번 중복된다.
소스 코드
import java.util.*;
class Solution
{
static int count = 0;
static boolean[] ck;
static ArrayList<Integer>[] num;
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
int N = sc.nextInt();
int M = sc.nextInt();
count = 0;
ck = new boolean[N];
Arrays.fill(ck, false);
num = new ArrayList[N];
for(int i=0; i<N; i++)
num[i] = new ArrayList<>();
for(int i=0; i<M; i++) {
int x = sc.nextInt();
int y = sc.nextInt();
num[x-1].add(y-1);
num[y-1].add(x-1);
}
for(int i=0; i<N; i++) {
ck[i] = true;
dfs(i, 1);
ck[i] = false;
}
System.out.println("#" + test_case + " " + count);
}
}
static void dfs(int i, int cnt) {
count = Math.max(count, cnt);
for(int n : num[i]) {
if(!ck[n]) {
ck[n] = true;
dfs(n, cnt+1);
ck[n] = false;
}
}
}
}
'코테 > 자바' 카테고리의 다른 글
[SWEA] 2817. 부분 수열의 합 (0) | 2023.05.18 |
---|---|
[SWEA] 1244. 최대 상금 (0) | 2023.05.18 |
[SWEA] 1209. Sum (0) | 2023.05.17 |
[SWEA] 1240. 단순 2진 암호코드 (0) | 2023.05.17 |
[SWEA] 1208. Flatten (0) | 2023.05.17 |