알고리즘

백준 2014번 소수의 곱 (JAVA)

박카스마시며코딩 2023. 9. 30. 22:49

https://www.acmicpc.net/problem/2014

 

2014번: 소수의 곱

첫째 줄에 K(1 ≤ K ≤ 100), N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 K개의 소수가 오름차순으로 주어진다. 같은 소수가 여러 번 주어지는 경우는 없으며, 주어지는 소수는 모두 541보다 작거나

www.acmicpc.net

 

저는 우선순위 큐를 통해 문제를 해결하였습니다.

우선순위 큐에 입력 값들을 넣고, 맨 앞에 있는 것을 입력값에 각각 곱하여 문제를 해결하였습니다.

 

package BOJ.greedy;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
import java.util.function.Function;

public class BOJ_2014 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Function<String,Integer> stoi = Integer::parseInt;
        Function<String,Long> stol = Long::parseLong;
        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = stoi.apply(st.nextToken());
        int k = stoi.apply(st.nextToken());
        long[] number = new long[n];
        st = new StringTokenizer(br.readLine());
        PriorityQueue<Long> pq = new PriorityQueue<>();
        for(int i = 0 ; i < n ; i++){
            number[i] = stol.apply(st.nextToken());
            pq.offer(number[i]);
        }
        long temp = 0;
        for(int i = 0 ; i < k ; i++){
            temp = pq.poll();
            for(int j = 0 ; j < n ; j++){
                long value = temp * number[j];
                pq.offer(value);
                if(temp % number[j] == 0){
                    break;
                }
            }
        }
        System.out.println(temp);
    }
}