๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
3๏ธโƒฃ Swift/Problem Solving

[Swift Algorithm] ์†Œ์ˆ˜ ์ฐพ๊ธฐ Programmers(Lv.1)

by seolhee2750 2021. 6. 15.
๋ฌธ์ œ ์„ค๋ช…

1๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž n ์‚ฌ์ด์— ์žˆ๋Š” ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”.

์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ๋งŒ ๋‚˜๋ˆ„์–ด์ง€๋Š” ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
(1์€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.)

 

์ œํ•œ ์กฐ๊ฑด
  • n์€ 2์ด์ƒ 1000000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ
n result
10 4
5 3

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
func solution(_ n:Int) -> Int {
    var result = 0 // ์†Œ์ˆ˜์˜ ๊ฐœ์ˆ˜ ๋‹ด๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
    var answer = true // ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜
    
    for i in 2...n {
        // 2, 3์€ ์–ด์ฐจํ”ผ ์†Œ์ˆ˜๊ณ 
        // ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋‚˜๋ˆ„๊ธฐ ์œ„ํ•ด์„œ ์ œ๊ณฑ๊ทผ์ด 2๋ณด๋‹ค ์ž‘์€ 2, 3์€ ๋”ฐ๋กœ ๋นผ์„œ result์— ๊ฐœ์ˆ˜๋ฅผ ๋”ํ•ด์ฃผ์—ˆ์Œ
        if i < 4 {
            result += 1
        }
        
        else {
            // i๋ฅผ 2๋ถ€ํ„ฐ i์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๋‚˜๋ˆ ๋ณด๋Š” for๋ฌธ
            for j in 2...Int(sqrt(Double(i))) {
                // i๊ฐ€ ํ•œ ๋ฒˆ์ด๋ผ๋„ ๋‚˜๋ˆ ์ ธ ๋–จ์–ด์ง„๋‹ค๋ฉด ๊ทธ ์ˆ˜๋Š” ์†Œ์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ break
                if i % j == 0 {
                    answer = false
                    break
                }
                
                // i๊ฐ€ ๋‚˜๋ˆ ์ ธ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๋ฉด answer์— true ์ €์žฅ
                else {
                    answer = true
                }
            }
            
            // ๋ฐ˜๋ณต๋ฌธ ์ข…๋ฃŒ ํ›„ answer๊ฐ€ true์ผ ๊ฒฝ์šฐ ํ•ด๋‹น ์ˆ˜๋Š” ์†Œ์ˆ˜๋กœ ํŒ๋ณ„, result์— 1 ์ถ”๊ฐ€
            if answer == true {
                result += 1
            }
        }
    }
    
    return result
}
  • 2, 3์€ ์–ด์ฐจํ”ผ ์†Œ์ˆ˜๊ธฐ ๋•Œ๋ฌธ์— n์ด 4๋ณด๋‹ค ํด ๋•Œ๋Š” 2, 3์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ์นด์šดํŠธํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ฃผ์–ด์ง„ ์ˆ˜์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ฃผ์–ด์ง„ ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด์ฃผ์—ˆ๋‹ค. 
    (์–ด์ฐจํ”ผ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋„ ๋‚˜๋ˆ ์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ๋”์ด์ƒ ๋‚˜๋ˆ ์งˆ ์ˆ˜๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ.)
  • Bool ๋ณ€์ˆ˜๋กœ ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„ํ•˜์—ฌ ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ–ˆ๋‹ค.

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ž…๋ ฅ์ด 4 ๋ฏธ๋งŒ์ผ ๋•Œ๋ฅผ ๋”ฐ๋กœ ๋นผ์คฌ๋Š”๋ฐ,
    2์ผ์ˆ˜๋„ ์žˆ๊ณ  3์ผ์ˆ˜๋„ ์žˆ๋Š”๋ฐ ๊ทธ ์ผ€์ด์Šค๋ฅผ ๋””ํ…Œ์ผํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ์ง€ ์•Š์€ ๊ฒƒ์ด ์•„์‰ฌ์šด ๋“ฏ ํ•˜๋‹ค.
  • ์ „์ฒด์ ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ์ข€ ๊ธธ๊ณ  ์ •๋ฆฌ๋˜์ง€ ์•Š์€ ๋Š๋‚Œ,, ๊ฐœ์„ ์ด ํ•„์š”ํ•˜๋‹ค.

 


 

๐Ÿ– [ ์ถ”๊ฐ€ ] 1์ฃผ์ผ ํ›„ ๋‹ค์‹œ ํ’€์–ด๋ณด๊ธฐ

import Foundation

func solution3(_ n:Int) -> Int {
    var count = 2
    
    if n == 2 { return 1 }
    else if n == 3 { return 2 }
    else {
        for i in 4...n {
            var isPrime = true
            for j in 2...Int(sqrt(Double(i))) {
                if i%j == 0 { isPrime = false; break }
            }
            if isPrime == true { count += 1 }
        }
    }
    return count
}
  • ์ž…๋ ฅ์ด 2์ผ ๋•Œ, 3์ผ ๋•Œ๋ฅผ ๋”ฐ๋กœ ๋นผ์ฃผ์–ด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธ ํ•ด์ฃผ์—ˆ๋‹ค.
  • ์ž…๋ ฅ์ด 4 ์ด์ƒ์ผ ๋•Œ ๋ถ€ํ„ฐ๋Š” ์ž…๋ ฅ๋œ ์ˆ˜๋ฅผ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋กœ ๋‚˜๋ˆ„์–ด ์†Œ์ˆ˜๋ฅผ ํŒ๋ณ„ํ•ด์ฃผ์—ˆ๋‹ค.
  • ํŒ๋ณ„์€ Bool ๊ฐ’์œผ๋กœ ํ•ด์ฃผ์—ˆ๊ณ , true์ผ ๊ฒฝ์šฐ ํšŸ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ–ˆ๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ํ’€์ด์™€ ๋น„์Šทํ•˜์ง€๋งŒ 2, 3์ผ ๋•Œ ์ผ€์ด์Šค๋ฅผ ์ž˜ ์ •๋ฆฌํ•ด์ค€ ๊ฒƒ ๊ฐ™๋‹ค. 

 


 

 

๋ฌธ์ œ

https://programmers.co.kr/learn/courses/30/lessons/12921

๋Œ“๊ธ€