Skip to content

Latest commit

Β 

History

History
64 lines (55 loc) Β· 3.04 KB

File metadata and controls

64 lines (55 loc) Β· 3.04 KB

μˆ˜ν•™1-2(μ†Œμˆ˜, μ†ŒμΈμˆ˜λΆ„ν•΄, νŒ©ν† λ¦¬μ–Ό)

κ΄€λ ¨ λ¬Έμ œλ“€

[issue]에 λŒ€ν•œ 정리

[#issue1] 1~N κΉŒμ§€μ˜ μˆ˜μ—μ„œ λͺ¨λ“  μ†Œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” 방법 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체'의 κ°œλ…

* μ–΄λ–€ 수 C에 λŒ€ν•΄ μ†Œμˆ˜μΈμ§€ μ•„λ‹Œμ§€ νŒλ‹¨ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„: O(루트 C)
    * 2 ~ (루트 C)κΉŒμ§€λ§Œ ν™•μΈν•˜λ©΄ 되기 λ•Œλ¬Έ
* κ·Έλ ‡λ‹€λ©΄ 1 ~ 1,000,000κΉŒμ§€μ˜ λͺ¨λ“  μ†Œμˆ˜λ₯Ό κ΅¬ν•˜λŠ” 데 κ±Έλ¦¬λŠ” μ‹œκ°„?
    * 총 N개의 수 * 각각 μ†Œμˆ˜μΈμ§€ νŒλ‹¨ν•˜λŠ” μ‹œκ°„λ³΅μž‘λ„
    * = N * O(루트N) = O(N루트N)
    * 즉, 1,000,000 * 1,000 = 10μ–΅ = 10sec
* 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체'의 κ°œλ…
    1. 2λΆ€ν„° NκΉŒμ§€μ˜ λͺ¨λ“  수λ₯Ό μ λŠ”λ‹€.
    2. 아직 μ§€μ›Œμ§€μ§€ μ•Šμ€ 수 μ€‘μ—μ„œ κ°€μž₯ μž‘μ€ 수λ₯Ό μ°ΎλŠ”λ‹€.
    3. κ·Έ 수λ₯Ό μ§€μš°κ³  μ†Œμˆ˜λ‘œ μ €μž₯ν•œλ‹€.
    4. κ·Έ 수의 배수λ₯Ό μ§€μš΄λ‹€.
* 예λ₯Ό λ“€μ–΄, 1~100 κΉŒμ§€μ˜ μˆ˜μ—μ„œ λͺ¨λ“  μ†Œμˆ˜λ₯Ό κ΅¬ν•΄λ³΄μž
    * 2, 3, 5, 7의 μˆœμ„œλ‘œ μœ„μ˜ 방법을 μ μš©ν•˜λ©΄ 
    * 11λΆ€ν„°λŠ” 11*11 = 121(100초과)이기 λ•Œλ¬Έμ— 더 이상 μˆ˜ν–‰ν•  ν•„μš”κ°€ μ—†λ‹€.
// 'μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체'λ₯Ό μ΄μš©ν•œ start ~ end λ²”μœ„μ˜ μˆ˜μ—μ„œμ˜ μ†Œμˆ˜ κ΅¬ν•˜κΈ°
Scanner s = new Scanner(System.in);
int start = s.nextInt();
int end = s.nextInt();

ArrayList<Integer> primeList = new ArrayList<>(); 
boolean[] checkPrime = new boolean[n + 1]; // true : μ§€μ›Œμ§, false : μ§€μ›Œμ§€μ§€ μ•ŠμŒ

for (int i = 2; i <= end; i++) {
    // μ§€μ›Œμ§€μ§€ μ•Šμ€ μˆ˜λŠ” μ†Œμˆ˜
    if (!checkPrime[i]) {
        primeList.add(i); // 2~end κΉŒμ§€μ˜ μ†Œμˆ˜ μ €μž₯
        
        // iκ°€ 1,000,000 인 경우 i*iλŠ” λ²”μœ„λ₯Ό λ„˜μ–΄κ°€λ―€λ‘œ j=i*i -> j=i*2
        // for (int j = i * i; j <= n; j += i){
        for (int j = i * 2; j <= end; j += i) { 
            checkPrime[j] = true; // μ§€μ›Œμ§€μ§€ μ•Šμ€ 수의 λ°°μˆ˜λ“€μ„ μ§€μš΄λ‹€
        }
    }
}

[#issue2] μ†ŒμΈμˆ˜λΆ„ν•΄μ˜ κ°œλ…κ³Ό κ°„λ‹¨ν•œ 풀이법

* μ†ŒμΈμˆ˜λΆ„ν•΄: μ •μˆ˜ N을 μ†Œμˆ˜μ˜ 곱으둜 λΆ„ν•΄ν•˜λŠ” 것
* κ°„λ‹¨ν•œ 풀이법 
    * μ†Œμˆ˜λ₯Ό ꡬ할 ν•„μš” 없이
    * 2~루트num κΉŒμ§€μ˜ 수λ₯Ό μˆœμ„œλŒ€λ‘œ λ°˜λ³΅ν•΄μ„œ
    * Nλ₯Ό λ‚˜λˆŒ 수 없을 λ•ŒκΉŒμ§€ κ³„μ†ν•΄μ„œ λ‚˜λˆˆλ‹€.

Reference

🏠 Go Home