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

Algorithm

[Codility] (Swift) CountDiv

๊ฐ์ž ๐Ÿฅ” 2022. 12. 22. 14:25
๋ฐ˜์‘ํ˜•

 

๐ŸŸ  ๋ฌธ์ œ

 

๐ŸŸ  ์˜ค๋‹ต์œผ๋กœ ๋ฐ”๋ผ๋ณธ ๋‚˜์˜ ์ฝ”๋“œ

์ด๋ฒˆ์—๋„ ์—ญ์‹œ, time out ์ด๋‹ค.ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ ๋‚ด๊ฐ€ ์—ฌํƒœ๊นŒ์ง€ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ–ˆ์„๋•Œ, ์‹œ๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด์„œ ํฌ๊ฒŒ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๊ณต๋ถ€ํ–ˆ์—ˆ๋‹ค. ๋Œ€์ฒด ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ๊ณ ๋ คํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ•œ๋‹จ ๋ง์ธ๊ฐ€? ๋‹ค๋“ค ์ฒœ์žฌ์ธ๊ฐ€...  ๊ทธ๋ƒฅ ๋ฌธ์ œ๋ฅผ ํ’€์ง€๋„ ๋ชปํ•˜๋Š”๋ฐ ์‹œ๊ฐ„๋ณต์žก๋„๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผํ•˜๋‹ค๋‹ˆ,, ํ‘.. ์Šฌํ”„๋‹ค.

์ด๊ฒŒ ๋‚˜์˜ ์ฝ”๋“œ์ด๋‹ค. ๊ทธ๋ƒฅ ์ง„์งœ ๋„ ๋‹จ์ˆœํ•˜๊ฒŒ for๋ฌธ์„ ๊ฐˆ๊ฒผ๋‹ค!

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    var count = 0
    for i in A...B {
        if i % K == 0 {
            count += 1
        }
    }
    return count
}

์—ญ์‹œ๋‚˜,,, ์‹œ๊ฐ„์ดˆ๊ณผ. ๋งŒ์•ฝ A๊ฐ€ 1, B๊ฐ€ 2,000,000,000์ด๊ณ , K๊ฐ€ 2๋ผ๋ฉด, ์ตœ๋Œ€ 2,000,000,000์˜ for๋ฌธ์ด ๋Œ๊ฒŒ ๋œ๋‹ค. ๋Œ์•„๋ฒ„๋ ค~ ๋‹น์—ฐํžˆ ์‹œ๊ฐ„์ดˆ๊ณผ์ง€. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ ๋จธ๋ฆฌ๋ฅผ ์‹ธ๋งค์–ด๋ณด์ž. 

์ž์ž ๋‹จ์ˆœํ•˜๊ฒŒ for๋ฌธ์„ ์ตœ์†Œ๋กœ ๋Œ๋ฆด ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์ž.

๐Ÿ”– B์—์„œ A๋ฅผ ๋นผ๊ณ , K๋กœ ๋‚˜๋ˆ ์ค€ ๋ชซ์„ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๊ฐ€์ง„๋‹ค๋ฉด?

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    let range = B - (A - 1)
    return range / K
}

์›จ์•Š๋˜...  ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ์ผ๋Š”๋ฐ, ์•„๋ž˜ ์ผ€์ด์Šค๋“ค์—์„œ ์ „๋ถ€ ์˜ค๋‹ต์ด์—ˆ๋‹ค. ๋‹ต์€ ์ •๋ง ๊ฐ€๊นŒ์šด๋ฐ ๋‹ค 1์ •๋„์˜ ์ฐจ์ด๋กœ ์˜ค๋‹ต์ด ๋‚ฌ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ฒ”์œ„๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ, ๊ฒŒ์† ์˜ค๋‹ต,, ๋Œ€์ฒด ์™œ?

A = 11, B = 345, K = 17 ์ผ€์ด์Šค๋„ ํ‹€๋ ธ๋‹ค. ์ž์ž ์‚ดํŽด๋ณด์ž. 345๊นŒ์ง€ 17์˜ ๋ฐฐ์ˆ˜๋Š” ์ด 20๊ฐœ๋‹ค. ์•„,, ๊ทผ๋ฐ 19๊ฐœ๋ผ๊ณ  ์ถœ๋ ฅ๋๊ตฌ๋‚˜. ์™œ ์ด๋ ‡๊ฒŒ ๋‚˜์˜ค์ง€?

345์—์„œ 11์„ ๋นผ๋ฒ„๋ฆฌ๋‹ˆ๊นŒ,334๊ฐ€ ๋œ๋‹ค. ๊ฒฐ๊ตญ, 334๊นŒ์ง€ 17์˜ ๋ฐฐ์ˆ˜๋ฅผ ์ฐพ๊ฒŒ ๋˜๋ฉด, 17์˜ ๋ฐฐ์ˆ˜์ธ 340์ด ๋ฒ”์œ„์•ˆ์— ๋“ค์–ด๊ฐ€์ง€ ๋ชปํ•ด์„œ ๊ฐฏ์ˆ˜๊ฐ€ ์„ธ์–ด์ง€์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด,, ๋‹ค๋ฅธ๋ฐฉ์‹์‘๋กœ ํ•ด์•ผํ•œ๋‹ค. (์ด ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚ด๊ฐ€ ์ž˜๋ชปํ•œ์ค„ ๋ชจ๋ฅด๊ณ  ๊ณ„์† ์ฝ”๋“œ๋งŒ ๊ณ ์น˜๊ณ  ์žˆ์—ˆ๋‹ค. ใ…‹ใ…‹ ๋ฐ”๋ณด.. .ํ•˜..)

๐Ÿ”– ๊ทธ๋Ÿผ B๊นŒ์ง€์˜ ๋ฐฐ์ˆ˜ ๊ฐฏ์ˆ˜์—์„œ A๊นŒ์ง€์˜ ๋ฐฐ์ˆ˜ ๊ฐฏ์ˆ˜๋ฅผ ๋นผ์ฃผ์ž

์ด ๊ทธ๋ฆผ๊ณผ ๊ฐ™์€ ํ’€์ด๋กœ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž!

 

์•„ ์™œ ๋˜ ์˜ค๋‹ต์ด์•ผ...

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    let bcount = B / K
    let acount = A / K

    return bcount - acount
}

๊ฒฐ๊ตญ ํ™”๊ฐ€๋‚˜์„œ ์ธํ„ฐ๋„ท์„ ๋ดค๋‹ค. ๋ญ๋ผ๊ณ ??? ๋‚˜๋ˆ—์…ˆ์„ ํ•˜๋ฉด ๋ฐ˜์˜ฌ๋ฆผ๋˜์–ด integer๋กœ ํ‘œํ˜„๋œ๋‹ค๊ณ ?!?! ์ฐธ๋‚˜.. ๊ทธ๋‹ˆ๊นŒ ๋‚˜๋ˆˆ ๊ฒฐ๊ณผ๊ฐ€ 2.5๋ฉด, 3์ด ์ถœ๋ ฅ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ„์† ํ‹€๋ ธ๋˜๊ฒƒ.. ์•„๋‹ˆ ๊ทธ๋Ÿผ,, ํ•˜.. Floor ์ฒ˜๋ฆฌ๋กœ ์†Œ์ˆ˜์ ์•„๋ž˜๋ฅผ ๋ฒ„๋ ค๋ฒ„๋ฆฌ์ž... ใ„ฑใ„ทใ„ฑใ„ท
(์ฐธ๊ณ  - https://jeong9216.tistory.com/440)

 

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

public func solution(_ A : Int, _ B : Int, _ K : Int) -> Int {
    let bcount = Int(floor(Double(B) / Double(K)))
    let acount = Int(floor(Double(A-1) / Double(K)))

    return bcount - acount
}

์˜ค์•„์•„์•„์•„,,, ์ง„์งœ ์–ด์ด์—†์–ด! floor๋กœ ์†Œ์ˆซ์ ์„ ๋ฒ„๋ ค์ฃผ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ๋นผ์„œ ๊ฐ’์„ ๋„์ถœํ•ด๋ƒˆ๋‹ค. .. ๋“œ๋””์–ด ์„ฑ๊ณต

 

๋ฐ˜์‘ํ˜•