알고리즘/백준

19699_소-난다!

베리영young 2024. 10. 27. 00:50

사용 알고리즘: 백트래킹

사용 언어: java

 

package week21;

import java.io.*;
import java.util.*;

public class Main {
	static int[] h;
	static int n, m;
	static List<Integer> primes = new ArrayList<>();
	static boolean[] notPrime = new boolean[9000];

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		
		//프라임이니
//		prime[2] = true;
//		prime[3] = true;
//		prime[5] = true;
//		prime[7] = true;
		for(int i=2; i<9000; i++) {
			if(!notPrime[i]) {
				for(int j=2; j*i<9000; j++) {
					notPrime[j*i] = true;
				}
			}
		}
		
		n = sc.nextInt(); // 소들의 수
		m = sc.nextInt(); //선별할 수
		h = new int[n]; //소들의 몸무게
		
		for(int i=0; i<n; i++) {
			h[i] = sc.nextInt();
		}
		
		back(0, 0, 0);
		
		Collections.sort(primes);
		if(primes.size() == 0) System.out.println(-1);
		else {for(int i : primes) {
			System.out.print(i+" ");
		}}
	}
	
	private static void back(int idx, int cnt, int sum) {
		if(m == cnt) {
			if(!notPrime[sum] && !primes.contains(sum))
				primes.add(sum);
			return;
		}
		
		for(int i=idx; i<n; i++) {
			
			back(i+1, 1+cnt, sum+h[i]);
		}
	}

}