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

[Swift Algorithm] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ Programmers(Lv.2)

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

๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(Least Common Multiple)๋ž€ ์ž…๋ ฅ๋œ ๋‘ ์ˆ˜์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ณตํ†ต์ด ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2์™€ 7์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 14๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ •์˜๋ฅผ ํ™•์žฅํ•ด์„œ, n๊ฐœ์˜ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” n ๊ฐœ์˜ ์ˆ˜๋“ค์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ณตํ†ต์ด ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. n๊ฐœ์˜ ์ˆซ์ž๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด arr์ด ์ž…๋ ฅ๋˜์—ˆ์„ ๋•Œ ์ด ์ˆ˜๋“ค์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด
  • arr์€ ๊ธธ์ด 1์ด์ƒ, 15์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • arr์˜ ์›์†Œ๋Š” 100 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ
arr result
[2,6,8,14] 168
[1,2,3] 6

 

๋‚ด ๋ฌธ์ œ ํ’€์ด
import Foundation

func solution(_ arr:[Int]) -> Int {
    return arr.reduce(1){LCM($0, $1)}
}

func LCM(_ n:Int, _ m:Int) -> Int {
    var gcd = 0
    var a = 0
    
    if n > m {
        a = n }
    else {
        a = m }
    
    while a > 0 {
        if (n%a == 0 && m%a == 0) {
            gcd = a
            break
        }
        else {
            a -= 1
        }
    }

    return n*m/gcd
}
  • ์—ฌ๋Ÿฌ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  ๋‘ ์ˆ˜์˜ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ LCM์„ ์ž‘์„ฑํ–ˆ๋‹ค.
  • LCM ํ•จ์ˆ˜๋Š” ๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ , ๋จผ์ € ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค€๋‹ค.
    while๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํฐ ์ˆ˜ a๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ 1์”ฉ ๋นผ์ฃผ๋ฉฐ
    n, m์„ ๋‚˜๋ˆ ๋ณด๋‹ค๊ฐ€ ๋‘ ์ˆ˜ ๋ชจ๋‘ ๋‚˜๋ˆ ์ง€๋Š” ์ˆœ๊ฐ„ while๋ฌธ์„ ์ข…๋ฃŒํ•œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๊ณต์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • solution ํ•จ์ˆ˜์—์„œ๋Š” reduce๋ฅผ ์ด์šฉํ•ด LCM ํ•จ์ˆ˜์— arr ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์›์†Œ๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.
    ์ฒ˜์Œ์— 0๊ณผ ์ตœ์†Œ ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— 1๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.

 

๐Ÿ’ก ํ”ผ๋“œ๋ฐฑ
  • ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„ ๋‚˜์ค‘์— ๋‹ค์‹œ ์ˆ˜์ •ํ•ด๋ด์•ผ๊ฒ ๋‹ค,,!

 


 

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

func solution(_ arr:[Int]) -> Int {
    func lcmSolution(_ n1:Int, _ n2:Int) -> Int {
        var gcd = n1
        while gcd > 0 {
            if (n1 % gcd == 0 && n2 % gcd == 0) { break }
            else { gcd -= 1 }
        }
        return n1 * n2 / gcd
    }
    
    return arr.sorted().reduce(1){ lcmSolution($0, $1) }
}
  • ํ•จ์ˆ˜ ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์—ˆ๋‹ค. 
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๋Š” ๋กœ์ง์€ ์ฒซ ๋ฒˆ์งธ ํ’€์ด์™€ ๊ฐ™๊ณ , ๋ฐฐ์—ด์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ถ€๋ถ„์ด ๋‹ฌ๋ผ์กŒ๋‹ค.
  • ๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜์—ฌ ๊ตณ์ด ํฐ ์ˆ˜ ์ž‘์€ ์ˆ˜๋ฅผ ๋”ฐ์งˆ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๊ณ , reduce๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด์ฃผ์—ˆ๋‹ค.

 


 

๋ฌธ์ œ

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

๋Œ“๊ธ€