๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ Computer Science/Algorithm

[Algorithm] ์†Œ์ˆ˜์™€ ๊ด€๋ จ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(feat. ์—๋ผํ† ์Šค ํ…Œ๋„ค์Šค์˜ ์ฒด)

by Fomagran ๐Ÿ’ป 2022. 1. 19.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ๐Ÿ’ป ์ž…๋‹ˆ๋‹ค!

 

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค ๋ณด๋ฉด ์†Œ์ˆ˜๋ฅผ ์ฐพ์•„ํ– ํ•˜๋Š” ์œ ํ˜•์ด ๋งŽ์€๋ฐ์š”.

 

์†Œ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ์ฐพ์•„์•ผ ํ•  ๋•Œ, ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ๋ถ„๋ณ„ํ•ด์•ผ ํ•  ๋•Œ ๋“ฑ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

์˜ค๋Š˜์€ ์ •ํ™•ํžˆ ์•Œ๊ณ  ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ ๊ธ€์„ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~!


๊ธฐ์กด์˜ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•

 

๊ธฐ์กด์˜ ์†Œ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ k๋ผ๋Š” ์ˆ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹จ์ˆœํ•˜๊ฒŒ 2๋ถ€ํ„ฐ n๊นŒ์ง€ k๋กœ ๋‚˜๋ˆ ์„œ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ์ˆซ์ž์˜ ๊ฐฏ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•˜๋ฉด ๋˜๊ฒ ์ฃ ?

 

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์€ ์ˆซ์ž๊ฐ€ ์ปค์ง€๋ฉด ์ปค์งˆ์ˆ˜๋ก ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ์š”.


์—๋ผํ† ์Šค ํ…Œ๋„ค์Šค์˜ ์ฒด

 

๋จผ์ € 2๋ถ€ํ„ฐ n๊นŒ์ง€์˜ ๊ตฌ๊ฐ„์—์„œ ์†Œ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋‚˜, ์–ด๋–ค ์†Œ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„  "์—๋ผํ† ์Šค ํ…Œ๋„ค์Šค์˜ ์ฒด"๋ฅผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ฐ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ฐพ๋Š” ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

1. 2๋ถ€ํ„ฐ n๊นŒ์ง€ ๋ชจ๋“  ์ˆ˜๋ฅผ ๋‚˜์—ดํ•œ๋‹ค.

2. ๋งŒ์•ฝ ์†Œ์ˆ˜๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค๋ฉด ์†Œ์ˆ˜๋ฅผ ๋”ฐ๋กœ ์ •ํ•˜๊ณ  ์†Œ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค.

3. ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ตฌ๊ฐ„์˜ ๋ชจ๋“  ์†Œ์ˆ˜๊ฐ€ ๋‚จ๋Š”๋‹ค.

 

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์ดํ•ดํ•˜๊ธฐ ํ›จ์”ฌ ํŽธํ•˜์‹ค ๊ฑฐ์—์š”!

 

์ถœ์ฒ˜:์œ„ํ‚ค๋ฐฑ๊ณผ


 

์ฝ”๋“œ ๊ตฌํ˜„

 

func countPrimeNumber(_ n: Int) -> Int {
    var count = 0
    var array = Array.init(repeating: false, count: n+1)
    
    for i in 2...n {
        if array[i] == false {
            count += 1
            
            for j in stride(from: i, through: n, by: i) {
               array[j] = true
            }
        }
    }
    return count
}

 

์†Œ์ˆ˜๋ถ„๋ณ„๋ฒ•

 

๊ทธ ๋‹ค์Œ์œผ๋กœ ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ๋น ๋ฅด๊ฒŒ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ๊นŒ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” "์ œ๊ณฑ๊ทผ"์„ ์ด์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ์š”.

 

n์˜ ์•ฝ์ˆ˜๋Š” ๋ฌด์กฐ๊ฑด n์˜ ์ œ๊ณฑ๊ทผ ์•ˆ์— ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2๋ถ€ํ„ฐ sqrt(n)์˜ ๋ฒ”์œ„์—์„œ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ฃผ์˜ํ•  ์ ์€ ์ œ๊ณฑ๊ทผ์ด 2๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ œ๊ณฑ๊ทผ์„ ์ด์šฉํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด 2๋ถ€ํ„ฐ n๊นŒ์ง€ ํƒ์ƒ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


์ฝ”๋“œ ๊ตฌํ˜„

 

func isPrimeNumber(_ n:Int) -> Bool {
    let sqrt = Int(sqrt(Double(n))) >= 2 ? Int(sqrt(Double(n))) : n
    for i in 2..<sqrt {
        if n%i == 0 {
            return false
        }
    }
    return true
}
728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€