반응형
문제
K개의 소수가 있다. 이때, 이 소수들 중에서 몇 개를 곱해서 얻게 되는 수들이 있을 것이다. 소수들을 선택할 때에는 같은 수를 선택해도 되며, 주어지는 소수 자체도 포함시키자.
예를 들어 세 소수가 2, 5, 7이었다면, 이러한 곱들을 오름차순으로 나타내 보면, 2, 4, 5, 7, 8, 10, 14, 16, 20, 25, 28, 32, 35, 등이 된다.
K개의 소수가 주어졌을 때, 이러한 소수의 곱들 중에서 N번째 수를 구해 보자. 단 정답은 231보다 작은 자연수이다.
입력
첫째 줄에 K(1 ≤ K ≤ 100), N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 K개의 소수가 오름차순으로 주어진다. 같은 소수가 여러 번 주어지는 경우는 없으며, 주어지는 소수는 모두 541보다 작거나 같은 자연수이다.
출력
첫째 줄에 문제에서 설명한 대로 소수의 곱을 나열했을 때, N번째 오는 것을 출력한다.
1. 541이하의 소수가 제곱되고 제곱되는 상황에서 충분히 int 범위를 넘을 수 있으므로 가장 큰 단위인 long long써줘야함.
2. 그냥 우선순위 큐에서 받아서 돌리면 그냥 곱한 값이 우선순위 큐안에 존재하는 어떤 값보다 큰 경우 N의 범위를 초과한 부분에 있어서도 우선순위 큐에 들어감 . 이 영역은 N의 끝까지 이르러도 가지 못함. 쓸데 없는 메모리가 낭비됨.
#include<iostream>
#include<queue>
반응형
'Algorithm' 카테고리의 다른 글
백준 9935번 문자열 폭발 (0) | 2019.10.25 |
---|---|
백준 2875번 대회 or 인턴 (0) | 2019.10.25 |
백준 11403번 경로찾기 (0) | 2019.10.10 |
백준 1260번 DFS와 BFS 재풀이. (0) | 2019.10.08 |
백준 6603번 로또 (0) | 2019.10.07 |