๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค LV.0] ์†Œ์ธ์ˆ˜๋ถ„ํ•ด

by hyebin (Helia) 2022. 12. 30.
๋ฐ˜์‘ํ˜•

์†Œ์ธ์ˆ˜๋ถ„ํ•ด

๋ฌธ์ œ ์„ค๋ช…

์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋ž€ ์–ด๋–ค ์ˆ˜๋ฅผ ์†Œ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 12๋ฅผ ์†Œ์ธ์ˆ˜ ๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 12์˜ ์†Œ์ธ์ˆ˜๋Š” 2์™€ 3์ž…๋‹ˆ๋‹ค. ์ž์—ฐ์ˆ˜ n์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ n์˜ ์†Œ์ธ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋‹ด์€ ๋ฐฐ์—ด์„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

์ œํ•œ ์‚ฌํ•ญ

  • 2 ≤ n ≤ 10,000

์ž…์ถœ๋ ฅ ์˜ˆ

n result
12 [2, 3]
17 [17]
420 [2, 3, 5, 7]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1

  • 12๋ฅผ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [2, 3]์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #2

  • 17์€ ์†Œ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [17]์„ return ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ #3

  • 420์„ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋ฉด 2 * 2 * 3 * 5 * 7์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ [2, 3, 5, 7]์„ return ํ•ฉ๋‹ˆ๋‹ค.

์ œ์ถœ

import Foundation

func solution(_ n:Int) -> [Int] {
    var arr = Array(repeating: true, count: n+1)
    var primes = [Int]()
    
    for i in 2...n {
        if arr[i] == true {
            for j in stride(from: i, through: n, by: i) {
                    arr[j] = false
            }
            primes.append(i)
        }
    }
    return primes.contains(n) ? [n] : primes.filter{n%$0 == 0}
}
์†Œ์ˆ˜์ธ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฐ์—ด arr์™€ ์†Œ์ˆ˜๋ฅผ ๋‹ด์„ ๋ฐฐ์—ด primes๋ฅผ ์„ ์–ธํ•œ๋‹ค.
i๋ฅผ 2๋ถ€ํ„ฐ n๊นŒ์ง€ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ, arr[i]๊ฐ€ true๋ผ๋ฉด i์˜ ๋ฐฐ์ˆ˜๋“ค์˜ arr ๊ฐ’์„ false๋กœ ๋ฐ”๊พผ ํ›„ primes ๋ฐฐ์—ด์— i๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค

์ดํ›„ primes ํ•จ์ˆ˜์˜ n ์ด ์žˆ๋‹ค๋ฉด, n์ด ์†Œ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— n์„ ๋ฐฐ์—ด์— ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•œ๋‹ค
primes ํ•จ์ˆ˜์— n์ด ์—†๋‹ค๋ฉด, filter ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ n์„ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๊ฐ€ 0์ธ ๊ฐ’๋“ค์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค

 

๋ฐ˜์‘ํ˜•