[Swift - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ

2021. 5. 20. 14:52ใ†๐Ÿง‘๐Ÿป‍๐Ÿ’ป iOS ๊ฐœ๋ฐœ/Swift - Algorithm - Solutions

๋ฌธ์ œ ํ•ด์„


N๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ์ด ์ˆ˜๋“ค์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ์ˆ˜๋“ค์€ 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ด๊ณ  ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” 1๋ถ€ํ„ฐ 15 ์ดํ•˜๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

์—ฌ๋Ÿฌ ์ˆ˜์˜ ์ตœ๋Œ€ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

๋‘ ์ˆ˜ a, b์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ๋‘ ์ˆ˜์˜ ๊ณฑ์„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆ„์–ด ์ฃผ์–ด์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š”๊ตฐ์š”.

๋‘ ์ˆ˜์˜ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜๋Š” ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ์™€ ๋‘ ๋ฒˆ์งธ ์›์†Œ์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ๊ตฌํ•œ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜์™€ ๊ทธ๋‹ค์Œ ์›์†Œ์™€์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ „์ฒด N๊ฐœ์˜ ์ˆ˜์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋” ์ƒ๊ฐํ•ด๋ณด๊ธฐ


์ฃผ์–ด์ง„ ๋ฐฐ์—ด์—์„œ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ธ ์›์†Œ๊ฐ€ ์ตœ๋Œ€ 15๊ฐœ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์€ 100์ดํ•˜์˜ ๊ฐ€์žฅ ํฐ ์†Œ์ˆ˜ 15๊ฐœ์˜ ๊ฐ’์˜ ๊ณฑ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์ˆ˜๋“ค์€ [31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋“ค์˜ ๊ณฑ์€ 3.5636434e+26์œผ๋กœ Int์˜ ์ตœ๋Œ“๊ฐ’์ธ 9.2233e+18์„ ํ›Œ์ฉ ๋›ฐ์–ด๋„˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ์—์„œ๋Š” ๋ฆฌํ„ด ๊ฐ’์„ Intํ˜•์œผ๋กœ ์ •ํ•ด์ฃผ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฌํ•œ ์˜ˆ์™ธ์ƒํ™ฉ์€ ์ œ์™ธํ•˜๊ณ  ๊ฐ’์„ ๊ตฌํ•˜๋ผ๋Š” ์˜๋ฏธ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์ด ์žˆ๋Š” ์ƒํ™ฉ์ด๋ฉด ์ž๋ฃŒํ˜•์˜ ํƒ€์ž…์„ ์ž˜ ํŒ๋‹จํ•˜์—ฌ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด & ์ฝ”๋“œ


func solution(_ arr:[Int]) -> Int {
    // ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ํ†ตํ•ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
    func gcdOfTwoNumbers(_ a: Int, _ b: Int) -> Int {
        let r = a % b
        
        if r != 0 {
            return gcdOfTwoNumbers(b, r)
        } else {
            return b
        }
    }
    // ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜
    func lcmOfTwoNumbers(_ a: Int, _ b: Int) -> Int {
        return a * b / gcdOfTwoNumbers(a, b)
    }
    
    // 1๊ณผ ์ž๊ธฐ์ž์‹ ์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋Š” ์ž๊ธฐ ์ž์‹ ์ž„์œผ๋กœ 1๋กœ ์ดˆ๊นƒ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ 
    // reduce๋กœ ๊ฐ’์„ ๊ณ„์‚ฐ
    return arr.reduce(1){lcmOfTwoNumbers($0, $1)}
}

์ฐธ๊ณ 

  • ๋‚˜๋ฌด ์œ„ํ‚ค: ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜, ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•