λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
⌨️ 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인 값듀을 λ°˜ν™˜ν•œλ‹€

 

λ°˜μ‘ν˜•