알고리즘/프로그래머스
스킬체크 level 3
vivi
2021. 10. 12. 08:12
import java.util.Scanner;
public class Main {
static int[][] edgelist;
static int[] gpslog;
static int N, M, K, answer;
public void DFS(int L, int[] arr) {
if (L == K) {
if (arr[K - 1] == gpslog[K - 1]) {
int cnt = 0;
for (int i = 0; i < K; i++) {
if (arr[i] != gpslog[i])
cnt++;
}
answer = Math.min(cnt, answer);
return;
} else
return;
} else {
arr[0] = gpslog[0];
for (int i = 1; i < N + 1; i++) {
if (edgelist[arr[L - 1]][i] == 1) {
arr[L] = i;
DFS(L + 1, arr);
}
}
}
}
public int solution(int n, int m, int[][] edge_list, int k, int[] gps_log) {
answer = Integer.MAX_VALUE;
edgelist = new int[n + 1][n + 1];
for (int i = 0; i < m; i++) {
edgelist[edge_list[i][0]][edge_list[i][1]] = 1;
edgelist[edge_list[i][1]][edge_list[i][0]] = 1;
}
gpslog = gps_log;
int[] cor = new int[k];
N = n;
M = m;
K = k;
DFS(1, cor);
if (answer == Integer.MAX_VALUE)
return -1;
return answer;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Main T = new Main();
int n = 7;
int m = 10;
int[][] edge_list = { { 1, 2 }, { 1, 3 }, { 2, 3 }, { 2, 4 }, { 3, 4 }, { 3, 5 }, { 4, 6 }, { 5, 6 }, { 5, 7 },
{ 6, 7 } };
int k = 6;
int[] gps_log = { 1, 2, 3, 3, 6, 7 };
System.out.println(T.solution(n, m, edge_list, k, gps_log));
}
}
전체경우 다 구해서 비교하려고 했더니 시간초과떠서 나중에 다시 풀어보려고 임시 저장
https://programmers.co.kr/skill_checks/321476?challenge_id=848