알고리즘
백준 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);
}
}