๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ–ฅ CS/Algorithm

[Algorithm/Swift] ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค(Lv.1) - ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

์•ˆ๋…•ํ•˜์„ธ์š” ์ œ์ธ์ž…๋‹ˆ๋‹ค!!

์˜ค๋Š˜์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๊ฐ€ ์•Œ๊ฒŒ๋œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ธฐ๋กํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๋ฌธ์ œ๋Š” ๋ ˆ๋ฒจ1์˜ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด์ง€๋งŒ

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๊ณต์‹(?)๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ์•Œ๊ณ ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฌธ์ œ๋“ค์—์„œ์˜ ์‘์šฉ์— ๋Œ€๋น„ํ•ด ์ •๋ฆฌํ•˜๊ณ  ๋„˜์–ด๊ฐ€๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!!

๋ฌธ์ œ ๋งํฌ

 

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

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

programmers.co.kr

๋ฌธ์ œ ์„ค๋ช…

๋‘ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜, solution์„ ์™„์„ฑํ•ด ๋ณด์„ธ์š”. ๋ฐฐ์—ด์˜ ๋งจ ์•ž์— ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜, ๊ทธ๋‹ค์Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋„ฃ์–ด ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‘ ์ˆ˜ 3, 12์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 3, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 12์ด๋ฏ€๋กœ solution(3, 12)๋Š” [3, 12]๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ œํ•œ ์‚ฌํ•ญ

  • ๋‘ ์ˆ˜๋Š” 1์ด์ƒ 1000000์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ž…์ถœ๋ ฅ ์˜ˆ

 n  m  return
 3  12  [3, 12]
 2  5  [1, 10]

์ž…์ถœ๋ ฅ ์˜ˆ ์„ค๋ช…

์ž…์ถœ๋ ฅ ์˜ˆ #1
์œ„์˜ ์„ค๋ช…๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ #2
์ž์—ฐ์ˆ˜ 2์™€ 5์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 1, ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 10์ด๋ฏ€๋กœ [1, 10]์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ ํ’€์ด

์•ฝ์ˆ˜, ๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๋กœ๋„ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฌธ์ œ๋„ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,

๋ง‰์ƒ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•˜๋‹ˆ ์–ด๋ผ๋ผ.. ์ฝ”๋“œ๊ฐ€ ์—„์ฒญ ๋ณต์žกํ•ด์ง€๊ณ ..

๋ญ”๊ฐ€ ๋ฌธ์ œ์˜ ์˜๋„๋Š” ์ด๊ฒŒ ์•„๋‹Œ ๊ฒƒ ๊ฐ™๊ณ ..ํ•ด์„œ ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

 

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

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2๊ฐœ์˜ ์ž์—ฐ์ˆ˜(๋˜๋Š” ์ •์‹) a, b์— ๋Œ€ํ•ด์„œ a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ ํ•˜๋ฉด (๋‹จ, a>b),
a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” b์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค.

 

์ด ์„ฑ์งˆ์— ๋”ฐ๋ผ, b๋ฅผ r๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ r'์„ ๊ตฌํ•˜๊ณ , ๋‹ค์‹œ r์„ r'๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ

๋‚˜๋จธ์ง€๊ฐ€ 0์ด ๋˜์—ˆ์„ ๋•Œ ๋‚˜๋ˆ„๋Š” ์ˆ˜๊ฐ€ a์™€ b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์ž…๋‹ˆ๋‹ค!

์ด๋ฅผ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด, a๋ฅผ b๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€ ๊ฐ’์ด 0์ผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

/// ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜
func gcd(_ a: Int, _ b: Int) -> Int {
    if b == 0 {
        return a
    } else {
        return gcd(b, a % b)
    }
}

 

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ตฌํ–ˆ๋‹ค๋ฉด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์˜ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์˜ ๊ด€๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‘ ์ž์—ฐ์ˆ˜ A, B์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ G์ด๊ณ , ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๊ฐ€ L์ผ ๋•Œ,
A = a x G, B = b x G (a, b๋Š” ์„œ๋กœ์†Œ) ๋ผ ํ•˜๋ฉด ๋‹ค์Œ์ด ์„ฑ๋ฆฝํ•œ๋‹ค.
1) L = a x b x G
2) A x B = L x G

 

์ฆ‰, ๋‘ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’์€ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ x ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค!

a*b = ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ * ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

/// ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜
func lcm(_ a: Int, _ b: Int) -> Int {
    return a * b / gcd(a, b)
}

์ „์ฒด ์ฝ”๋“œ

/// ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜
func gcd(_ a: Int, _ b: Int) -> Int {
    if b == 0 {
        return a
    } else {
        return gcd(b, a % b)
    }
}

/// ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜
func lcm(_ a: Int, _ b: Int) -> Int {
    return a * b / gcd(a, b)
}

func solution(_ n:Int, _ m:Int) -> [Int] {
    return [gcd(n, m), lcm(n, m)]
}

 


 

[์ฐธ๊ณ  ์ž๋ฃŒ]

https://ko.wikipedia.org/wiki/์œ ํด๋ฆฌ๋“œ_ํ˜ธ์ œ๋ฒ•

https://hongjeongseob82.medium.com/ios-swift-gcd-lgm-์ตœ๋Œ€๊ณต์•ฝ์ˆ˜-์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜-49d57a36fda3

https://velog.io/@2dubu/Swift-์•Œ๊ณ ๋ฆฌ์ฆ˜-์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€-์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜