알고리즘/프로그래머스

스킬체크 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