본문 바로가기

알고리즘/백준

백준 2014 소수의 곱

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

 

2014번: 소수의 곱

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

www.acmicpc.net

우선순위 큐를 이용하는 문제다.

 

코드는 간단하다

 

아이디어도 간단하다. 자료형 실수만 하지 않으면 금방 풀 수 있을 것 같다. 

 

/* 소수의 곱 */

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>

#define INTMAX 2147483647
using namespace std;

int n_of_decimal, target;
int decimal[100];
set<int> is_it;

void input();
void solve();

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	input();
	solve();
	return 0;
}

void input() {
	cin >> n_of_decimal >> target;
	for (int i = 0; i < n_of_decimal; i++) {
		cin >> decimal[i];
	}
}

void solve() {
	priority_queue<int> pq;

	for (int i = 0; i < n_of_decimal; i++) {
		pq.push(-1 * decimal[i]);
	}
	
	int cnt = 0;
	while ((++cnt) < target) {
		int curr = pq.top();
		while (!pq.empty() && pq.top() == curr) pq.pop();


		for (int i = 0; i < n_of_decimal; i++) {
			long long int temp = (long long int)curr * (long long int)decimal[i];
			if (-1 * temp >= INTMAX) continue;
			pq.push(temp);
		}
	}

	cout << -1 * pq.top() << '\n';
	return;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 10868 최솟값  (0) 2020.08.16
백준 2104 부분배열 고르기  (0) 2020.08.15
백준 10159 저울  (0) 2020.08.14
백준 1976 여행가자  (0) 2020.08.14
백준 15684 사다리 조작  (0) 2020.08.13