MUKER_DEV with iOS

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ณธ๋ฌธ

๐Ÿค– ์•Œ๊ณ ๋ฆฌ์ฆ˜/programmers

[swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ๊ตฌ์Šฌ์„ ๋‚˜๋ˆ„๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜

MUKER 2022. 12. 22. 16:24
 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr


๋ฌธ์ œํ’€์ด๋ฅผ ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํ’€์ด์™€
๊ณ ์ฐจํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด๋กœ ๋‚˜๋ˆ„์–ด ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฒ˜์Œ ์ œ์ถœํ–ˆ๋˜ ํ’€์ด(์˜ค๋‹ต ์ฃผ์˜!)

func solution(_ balls:Int, _ share:Int) -> Int {
    func fac(_ n: Int) -> Int {
        return (1...n).reduce(1,*)
    }
    return fac(balls) / fac(balls-share) * fac(share)
}
  • ํŒฉํ† ๋ฆฌ์–ผ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ณต์‹๋Œ€๋กœ ๋Œ€์ž…ํ–ˆ์ง€๋งŒ
  • ๊ฝค ๋งŽ์€ ๋ฌธ์ œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์™”๋‹ค.
  • ์ด์œ ๋Š” ๊ณ„์‚ฐ์ค‘์— ๊ฐ’์ด ๋„˜์ณ์„œ ๊ทธ๋Ÿฐ ๊ฑฐ ๊ฐ™๋‹ค. (์ •ํ™•ํ•˜์ง€ ์•Š์Œ)
  • ์—ฌ๋Ÿฌ ํ’€์ด ์‚ฌ๋ก€๋ฅผ ๋ณด๊ณ  ๋‚ด ์‹๋Œ€๋กœ ๊ณ ์ณ๋ดค๋‹ค.

 

์ˆ˜์ •ํ•ด์„œ ํ†ต๊ณผํ•œ ํ’€์ด

import Foundation

func solution(_ balls:Int, _ share:Int) -> Int {
    guard balls != share else { return 1 }
    func fac(_ n: Int) -> Double {
        return Double((1...n).reduce(1.0){ Double($0) * Double($1) })
    }
    
    return Int(round(fac(balls) / fac(share) / fac(balls-share)))
}
  • balls์™€ share์˜ ์ˆ˜๊ฐ€ ๊ฐ™์„ ๋•Œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 1์ด๋‹ˆ guard๋ฌธ์œผ๋กœ return์„ ๋นผ์คฌ๋‹ค.
  • ํŒฉํ† ๋ฆฌ์–ผ ํ•จ์ˆ˜๋ฅผ ์‹น Double๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค. Double์ด ํ‘œํ˜„ ๋ฒ”์œ„๊ฐ€ ๋” ํฐ๊ฐ€..? ๊ณต๋ถ€ ์ข€ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

Int์™€ Double์˜ ์ตœ๋Œ€ ํ‘œํ˜„ ๊ฐ’

  • return ๊ฐ’์„ Int๋กœ ๋ฐ”๊พธ๊ธฐ์ „์— round๋กœ ์†Œ์ˆ˜์ ์„ ๋ฐ˜์˜ฌ๋ฆผํ–ˆ๋‹ค.
  • n! / (n-m)! * m! ๊ณต์‹์„ n! / m! / (n-m)!๋กœ ๋ฐ”๊ฟ”์คฌ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๋ฐ”๊พธ๋‹ˆ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ํ†ต๊ณผํ–ˆ์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•ด ์ข€ ๋” ์ ‘๊ทผํ•ด๋ด์•ผ ํ•  ๋“ฏํ•˜๋‹ค.
  • core dump ์—๋Ÿฌ ๋„ˆ๋ฌด ์‹ซ๋‹ค.