백준 2014 버블소트

문제

풀이

바보같음

#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
using namespace std;

const int INF=(1<<31)-1;
int N, K;
vector<long long> primes;
priority_queue<int> pq;
unordered_set<int> us;

void solve(long long n) {
    for(auto &prime:primes) {
        long long next=n*prime;
        if(next>INF)
            return;
        if(pq.size()==N) {
            if(pq.top()<next)
                return;
            if(us.find(next)==us.end())
                pq.pop();
        }
        if(us.find(next)==us.end()) {
            pq.push(next);
            us.insert(next);
            solve(next);
        }
    }
}
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin>>K>>N;
    primes.resize(K);
    for(auto &prime:primes) {
        cin>>prime;
    }
    solve(1);
    cout<<pq.top();
    //std::cout << "Hello, World!" << std::endl;
    return 0;
}

정상

#include <iostream>
#include <queue>
using namespace std;

int a[100005];
int main() {
	int k, n;
	cin >> k >> n;

	for (int i = 0; i < k; i++) {
		cin >> a[i];
	}

	priority_queue<long long, vector<long long>, greater<long long>> pq;
	for (int i = 0; i < k; i++)
		pq.push(a[i]);


	for (int i = 0; i < n - 1; i++) {
		long long t = pq.top();
		pq.pop();
		for (int j = 0; j < k; j++) {
			pq.push(a[j] * t);
			if (t % a[j] == 0) break;
		}
	}

	cout << pq.top() << endl;
}

[jungin]
Written by@[jungin]
안녕하세요

GitHub