Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 1978๋ฒˆ - ์†Œ์ˆ˜์ฐพ๊ธฐ (feat. ์ œ๊ณฑ๊ทผ, ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด) ์งˆ๋ฌธ์žˆ์Šต๋‹ˆ๋‹ค,,, ํ 

๊ฐ์ž ๐Ÿฅ” 2022. 12. 26. 17:12
๋ฐ˜์‘ํ˜•

๊ธฐ์กด ํ’€์ด ๋ฐฉ์‹ ๋ง๊ณ , ๋‹ค๋ฅธ ํ’€์ด ๋ฐฉ์‹ ๋‘ ๊ฐ€์ง€๋ฅผ ๋” ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋๊นŒ์ง€ ์ฝ์–ด์ฃผ์„ธ์šฉ!

 

๐ŸŸ  ๋ฌธ์ œ

https://www.acmicpc.net/problem/1978

 

1978๋ฒˆ: ์†Œ์ˆ˜ ์ฐพ๊ธฐ

์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

 

๐ŸŸ  ๋‚˜์˜ ํ’€์ด

2๋ถ€ํ„ฐ i-1๊นŒ์ง€ ๋Œ๋ฉด์„œ ๋‚˜๋จธ์ง€๊ฐ€ 0์œผ๋กœ ๋–จ์–ด์ง€๋Š” ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉด flag๋ฅผ false๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

 

๐ŸŸ  ์ •๋‹ต์ฝ”๋“œ

private func solution() -> Int {
    let n = Int(readLine()!)!
    let arr = readLine()!.split(separator: " ").map { Int($0)! }
    var answer = [Int]()

    for i in arr {
        var flag = true
        if i == 1 {
            continue
        }
        for j in 2..<i {
            if i % j == 0 {
                flag = false
            }
        }
        if flag {
            answer.append(i)
        }
    }

    return answer.count
}

print(solution())

 

๐Ÿ”– ์—ฌ๊ธฐ์„œ ์ž ๊น, 

 ๋‚˜๋Š” ์‚ฌ์‹ค ์ด ํ’€์ด๊ฐ€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚  ์ค„ ์•Œ๊ณ  ๋Œ๋ ธ๋Š”๋ฐ, ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค. ๊ทธ์ด์œ ๋Š” ์ฃผ์–ด์ง€๋Š” ์ˆ˜๋“ค์ด 1000์ดํ•˜์ด๊ธฐ ๋•Œ๋ฌธ! ๋งŒ์•ฝ 100000๊นŒ์ง€ ์ฃผ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด, 2๋ถ€ํ„ฐ i-1๊นŒ์ง€ ๋ชจ๋“  ์ˆ˜๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ์€, ๊ต‰์žฅํ•œ ์‹œ๊ฐ„์ด ์†Œ์š”๋  ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด๊ฒƒ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒํ• ๊นŒ?

๐Ÿ’ฌ ์ œ๊ณฑ๊ทผ๊นŒ์ง€ ์‚ดํŽด๋ณด๊ธฐ

10์„ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด์ž.

๋‚ด๊ฐ€ ํ’€์ดํ•œ ๋ฐฉ๋ฒ•์€, 2,3,4,5,6,7,8,9๊นŒ์ง€ ๋ชจ๋‘ 10์œผ๋กœ ๋‚˜๋ˆ ๋ณด๊ณ , ๊ฒฐ์ •ํ•˜๋Š” ํ’€์ด๋กœ ์ž‘์„ฑํ–ˆ๋‹ค. ํ˜„์žฌ 10์€ 2๋กœ ๋‚˜๋ˆ„์–ด๋–จ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฃจํ”„๊ฐ€ ํ•œ๋ฒˆ๋งŒ ๋Œ๊ณ  ๋๋‚˜์ง€๋งŒ, ๋งŒ์•ฝ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ๋Š” ์ตœ๋Œ€ 8๋ฒˆ์˜ ๋ฃจํ”„๊ฐ€ ๋ˆ๋‹ค๋Š” ๋ง์ด๋‹ค. ์ด ๋ฃจํ”„ ํšŸ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

10์˜ ์•ฝ์ˆ˜๋Š” 1,2,5,10 ์ด๋ ‡๊ฒŒ ๋„ค๊ฐœ์ด๋‹ค. ์•ฝ์ˆ˜์˜ ํŠน์ง•์„ ๋ณด๋ฉด, ๋Œ€์นญ์„ ์ด๋ฃฌ๋‹ค .์ฆ‰

1 x 10 
2 x 5
5 x 2
10 x 1

์ด ๊ฒฝ์šฐ๋ฅผ ๋ณด๋ฉด, 2 ๊นŒ์ง€๋งŒ ํŒ๋ณ„ํ•ด๋ด…๋ฉด, ์ด ์ˆ˜๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด ์„ฑ์งˆ์„ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.
10์— ๋ฃจํŠธ๋ฅผ ์”Œ์›Œ์„œ ์ œ๊ณฑ๊ทผ์„ ๊ตฌํ•ด๋ณด์ž. ๊ทธ๋ฆฌ๊ณ  ์ด ์ œ๊ณฑ๊ทผ์€ ์• ๋งคํ•œ ์†Œ์ˆ˜๋กœ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์—, +1 ํ•ด์ค€ ์ˆ˜๊นŒ์ง€๋งŒ ๊ตฌํ•ด๋ณด์ž.

private func solution() -> Int {
    let n = Int(readLine()!)!
    let arr = readLine()!.split(separator: " ").map { Int($0)! }
    var answer = [Int]()

    for i in arr {
        var flag = true
        if i == 1 {
            continue
        }
        for j in 2..<Int(sqrt(Double(i)))+1 {
            if i % j == 0 {
                flag = false
            }
        }
        if flag {
            answer.append(i)
        }
    }

    return answer.count
}

for๋ฌธ์„ ๋ณด๋ฉด, 2๋ถ€ํ„ฐ i๊นŒ์ง€ ์ˆœํšŒ๋ฅผ ๋Œ์•˜๋˜ ๊ฒƒ์ด, Int(squart(Double(i)))+1 ๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค. (sqrt๋Š” double๋งŒ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, i๋ฅผ double๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ๋‹ค์‹œ int๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.)

์ด๋ ‡๊ฒŒ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ธฐ์กด์— ๋Œ๋˜ ๋ฃจํ”„๊ฐ€ ๋ฐ˜ํ† ๋ง‰์ด ๋‚˜์„œ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋œ ์†Œ์š”๋˜๊ฒ ์ง€!

 

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

์ด๊ฒƒ์„ ์ด์šฉํ•˜๋ฉด ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์œผ๋กœ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ์–ด๋จธ๋จธ,,, ์ด๊ฑด ๋˜ ๋ญ๋žŒ,,์ฐพ์•„๋ณด๋‹ˆ ์ƒ๊ฐ๋ณด๋‹ค ๊ฐ„๋‹จํ•˜๋‹ค. ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. ๋จผ์ € ๋ฐฐ์—ด์— ํŒ๋ณ„ํ•ด์•ผํ•˜๋Š” ์ˆ˜๋“ค์„ ๋‹ค ๋„ฃ์–ด์ค€๋‹ค.
2. 2๋ถ€ํ„ฐ ์ž์‹ ์˜ ๋ฐฐ์ˆ˜๊ฐ€๋˜๋Š” ์ˆซ์ž๋“ค์„ ๋ชจ๋‘ ์ง€์›Œ์ค€๋‹ค. (์ž์‹ ์€ ์ œ์™ธ)
3. 3๋ถ€ํ„ฐ ์ž์‹œ๋Š์ด ๋ฐฐ์ˆ˜๊ฐ€ ๋˜๋Š” ์ˆซ์ž๋“ค์„ ์ง€์›Œ์ค€๋‹ค. (์ž์‹ ์€ ์ œ์™ธ) 
... ๋ฐ˜๋ณต

์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ์ด๋ฏธ ์ œ์™ธ๋œ ์ˆ˜๋ผ๋ฉด, ๊ฑด๋„ˆ๋›ฐ์–ด์ค€๋‹ค.

๊ฐ„๋‹จํ•˜๋‹ค! 2๋ถ€ํ„ฐ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ทธ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋“ค์€ ์ง€์›Œ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒŒ ๋ ํ…๋ฐ, ์ž๊ธฐ ์ž์‹ ์€ ์ œ์™ธํ•˜๊ณ  ์ง€์›Œ์ฃผ๊ฒŒ ๋˜๋‹ˆ๊นŒ, ์ œ์ผ ์ž‘์€ ์†Œ์ˆ˜ 2๋Š” ๊ทธ๋Œ€๋กœ ๋‚จ๊ฒŒ๋œ๋‹ค. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋˜๋ฉด, ์•ฝ์ˆ˜๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๋Š” ์ˆ˜๋งŒ ๋‚จ์„ ๊ฒƒ์ด๋‹ค!

private func solution() -> Int {
    let n = Int(readLine()!)!
    let arr = readLine()!.split(separator: " ").map { Int($0)! }
    var answer = [Int]()
    var visited = Array(repeating: false, count: 1001)
    visited[0] = true
    visited[1] = true
    // 1000๊นŒ์ง€ ๋ฏธ๋ฆฌ ์†Œ์ˆ˜ ํŒ๋ณ„
    for i in 2...1000 {
        if visited[i] == true {
            continue
        }

        for j in stride(from: i+i, through: 1000, by: i) {
            visited[j] = true
        }
    }

    // flase ์ด๋ฉด ์ถœ๋ ฅ
    for k in arr {
        if visited[k] == false {
            answer.append(k)
        }
    }

    return answer.count
}

print(solution())

 

๊ทผ๋ฐ,,๋†€๋ž๊ฒŒ๋„ ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด์™€ ์ผ๋ฐ˜ 2๋ถ€ํ„ฐ i๊นŒ์ง€ ๋ชจ๋‘ ์ˆœํšŒํ–ˆ์„๋•Œ๋ž‘ ๋ฉ”๋ชจ๋ฆฌ๋ž‘ ์‹œ๊ฐ„์ฐจ์ด๊ฐ€ ๋‚˜์ง€ ์•Š์•˜๋‹ค. ใ…‹ใ…‹ใ…‹ใ…‹

 

๊ทธ๋Ÿผ ์ œ๊ณฑ๊ทผ์„ ์ด์šฉํ–ˆ์„๋•Œ๋Š”?

์˜ค.. ์ด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ž‘ ์‹œ๊ฐ„์ด ๋”๊ฑธ๋ฆฌ๋Š”๋ฐ..? ๋ญ๋ƒ..๋ญ๋ƒ...

 

๐Ÿ™‹๐Ÿป‍โ™€๏ธ ์ง€๋‚˜๊ฐ€๋Š” ๊ณ ์ˆ˜๋‹˜๋“ค๊ป˜ ์งˆ๋ฌธ

1. ์ œ๊ณฑ๊ทผ์„ ์ด์šฉํ•ด์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ์ค„์˜€๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ๋Š˜์–ด๋‚œ ์ด์œ 
2. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ธ ์†Œ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ–ˆ๋Š”๋ฐ, ์™œ,,, ์ „์ฒด๋ฅผ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ๊ณผ ์‹œ๊ฐ„๋ณต์žก๋„, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋™์ผํ•˜๊ฒŒ ๋“œ๋Š”์ง€,,,

๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.. ํ˜น์‹œ N๊ณผ ์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ ๋„ˆ๋ฌด ์ž‘์•„์„œ? ๋™์ผํ•˜๊ฒŒ ๋‚˜์˜ค๋Š”๊ฒƒ์ธ๊ฐ€์š”.? ํ ,, 

๋ฐ˜์‘ํ˜•