[BOJ] μμμ κ³± - λ°±μ€ 2014 (μλ° JAVA) - PriorityQueue
π μμμ κ³± - λ°±μ€ 2014
https://www.acmicpc.net/problem/2014
λ¬Έμ
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λ²μ§Έ μ€λ κ²μ μΆλ ₯νλ€.
μμ μ λ ₯
4 19
2 3 5 7
μμ μΆλ ₯
27
π λ¬Έμ νμ΄
π μ€λ³΅μ κ±°
μ£Όμ΄μ§ μμλ₯Ό λͺ¨λ μ°μ μμνμ λ£κ³ νλμ© λΉΌλ΄λ©΄μ μ£Όμ΄μ§ μμλ€κ³Ό κ³±ν΄μ λ€μ μ°μ μμνμ λ£λλ€.
μ¬κΈ°κΉμ§λ λ°λ‘ λ μ€λ₯΄λ λΆλΆμ΄μλλ° λ¬Έμ λ μ€λ³΅ μ κ±°λ€. μλ₯Ό λ€λ©΄ 2*2*3, 3*2*2, 2*3*2 μ΄ μ€μ ν κ°λ§ νμ λ£μ΄μΌ νλ€.
κ·Έλ¬λ©΄ κ·μΉμ μ ν΄μΌ νλλ° λ¨Όμ κ³±νλ μκ° λ€μ κ³±νλ μλ³΄λ€ ν¬κ±°λ μμ μλ§ νμ λ£λλ‘ νλ©΄ λλ€. λ¬Έμ μμ (primesλ°°μ΄ : 2,3,5,7) λ‘ μλ₯Ό λ€λ©΄
3*2
3*2*2
5*3*3
5*5*3*2
μ°μ μμνμμ pollμ ν μ(κ°μ₯ μμ μ)μ forλ¬ΈμΌλ‘ μ£Όμ΄μ§ μμλ€κ³Ό κ³±νλλ° μ΄λ»κ² μ΄ κ·μΉμ μ μ©μν¬κΉ?
<μ°μ μμνμμ λΉΌλΈ μ> % primes[i] == 0 μ΄λ©΄ κ·Έλ€μ μμμ κ³±νλ©΄ μ λλ€. (μ£Όμ΄μ§ μμ λ°°μ΄μ μ€λ¦μ°¨μ)
ν΄λΉ μμλ‘ λλμ΄ λ¨μ΄μ§λ€λ©΄ μμΈμλΆν΄ μ ν΄λΉ μμκ° μ΄λ―Έ μ‘΄μ¬νλ κ²μ΄λ―λ‘ ν΄λΉ μμλ³΄λ€ ν° μμ (μμ λ°°μ΄μμ λ€μ μλ μμλ€)λ₯Ό κ³±νλ©΄ μ λλ€.
λ§μ½ pollμ ν μκ° 9 (=3*3) λΌλ©΄ λ€μ 2, 3 μΈμ λ€λ₯Έ μλ₯Ό κ³±νλ©΄ μ λλ€.
9 % 2 != 0 -> 9 *2 = 18μ μ°μ μμνμ λ£κ³
9 % 3 == 0 -> 9 *3 = 27κΉμ§ μ°μ μμνμ λ£κ³ 5λΆν°λ (3 * 3 * 5 λ κ·μΉμ μ΄κΈλκΈ° λλ¬Έμ) μ°μ μμνμ λ£μ§ μμμΌ νλ€.
top = pq.poll(); // pqλ μ°μ μμν
for (long prime : primes) { // primesλ μ£Όμ΄μ§ μμ λ°°μ΄
pq.add(top * prime);
if(top % prime == 0) break;
}
π μ μ λ²μ
λ μ£Όμν μ μ μ λ΅μ΄ 2^31 λ³΄λ€ μμ μμ¬μΌ νλ€λ μ μ΄λ€.
μ μ νμ
μΌλ‘ μ§μ κ³μ°μ Shiftμ°μ°μ (>>) λ‘ ν μ μλ€.
νμ§λ§ int λ²μλ -2^31 ~ 2^31κΉμ§λ‘ 2 >> 31μ νλ©΄ 0μ΄ λμ¨λ€.
λ°λΌμ longμΌλ‘ νμ
λ³νμ ν΄μ€μΌ νκ³ μ°μ μμν, μμ λ°°μ΄λ λͺ¨λ longμΌλ‘ νμ
μ μ μΈν΄μΌ νλ€.
κ·Έλ¦¬κ³ μ°μ μμνμ κ°μ λ£μ λ λ¬Έμ μμ μ£Όμ΄μ§ λ²μ (2^31)λ₯Ό λμ§ μλλ‘ ifλ¬ΈμΌλ‘ κ±Έλ¬μ€μΌ νλ€.
μ 체 μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.PriorityQueue;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int K = Integer.parseInt(st.nextToken());
int N = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
long[] primes = new long[K];
PriorityQueue<Long> pq = new PriorityQueue<>();
for (int i = 0; i < K; i++) {
primes[i] = Long.parseLong(st.nextToken());
pq.add(primes[i]);
}
long top = 0;
while(--N >= 0){
top = pq.poll();
for (long prime : primes) {
if(top * prime >= (long)2 << 31) break;
pq.add(top * prime);
if(top % prime == 0) break;
}
}
System.out.println(top);
}
}
μ½ν μ 리 κΉνλΈ λ§ν¬
GitHub - Suyoung225/Algorithms: Javaλ‘ μκ³ λ¦¬μ¦ λ¬Έμ νμ΄
Javaλ‘ μκ³ λ¦¬μ¦ λ¬Έμ νμ΄. Contribute to Suyoung225/Algorithms development by creating an account on GitHub.
github.com