음준희 블로그

백준 2014 : 소수의 곱 c++ 본문

알고리즘/백준

백준 2014 : 소수의 곱 c++

joonhee305 2022. 12. 29. 00:32

2014번: 소수의 곱 (acmicpc.net)

 

2014번: 소수의 곱

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

www.acmicpc.net

백준 2014번 소수의 곱 (tistory.com)

 

백준 2014번 소수의 곱

문제 링크입니다: https://www.acmicpc.net/problem/2014 흥미로운 우선순위 큐 문제였습니다. 알고리즘은 아래와 같습니다.1. 숫자를 중복 삽입하는 것을 방지하기 위해 map을 이용합니다.2. 소수의 곱을 우

jaimemin.tistory.com

해당 블로그를 참고했습니다.

 

풀이
1. 현재 가장 작은 수에 소수들을 모두 곱하여 우선순위큐에 삽입
2. 우선순위큐의 크기가 n보다 크거나 같고 큐안의 최대값보다 현재 곱이 클 경우 더 이상 삽입하지 않음
3. 중복 삽입을 제외하기 위해 set 사용

 

#include<bits/stdc++.h>
#include<time.h>


#define MAX 1000000007
#define INF 2000000000
#define MOD 1000000007 
using namespace std;
typedef long long ll;
typedef pair<int, int > pii;
typedef pair<long long, long long> pll;
typedef pair<double, double> pdd;

int dx[8] = { 0, -1, 0, 1, 1, 1, -1, -1 };
int dy[8] = { -1, 0, 1, 0, -1, 1, 1, -1 };

/*
int dx[2][6] = {
    {1, -1, 0, 0 ,1, -1},
    {1, -1, 0, 0, -1, 1}
};
int dy[2][6] = {
    {0, 0, 1, -1 ,1, -1},
    {0, 0, 1, -1, 1, -1}
};*/

//int dx[8] = { -1, -1, 1, 1, -2, -2, 2, 2 };
//int dy[8] = { 2, -2, 2, -2, -1, 1, -1, 1 };

void init() {
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
}
ll gcd(ll a, ll b) { for (; b; a %= b, swap(a, b)); return a; }
ll lcm(ll a, ll b) { return (a * b) / gcd(a, b); }

set<ll> check;
int main() {
    init();
    int k, n; cin >> k >> n;
    int max_n = n;
    vector<ll> v(k);
    priority_queue<ll> pq;

    for (int i = 0; i < k; i++)
        cin >> v[i];

    int mx = 0;

    pq.push(-1);

    while (n--) {
        ll temp = -pq.top();
        pq.pop();
        for (int i = 0; i < k; i++) {
            ll next = temp * v[i];
            if (mx <= next && pq.size() >= max_n)
                break;

            if (!check.count(next)) {
                check.insert(next);
                pq.push(-next);
                mx = max(next, ll(mx));
            }
        }
    }
    cout << -pq.top();
}

 

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

백준 20442 : ㅋㅋ루ㅋㅋ  (0) 2022.12.31
백준 6137 : 문자열 생성  (0) 2022.12.30
백준 1034 : 램프 c++  (0) 2022.12.17
백준 1028 : 다이아몬드 광산  (0) 2022.12.15
백준 2933 : 미네랄 c++  (0) 2022.12.14