๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“– Problem Solution/Programmers

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

by Fomagran ๐Ÿ’ป 2020. 10. 9.
728x90
๋ฐ˜์‘ํ˜•
 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

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

programmers.co.kr

 

Foma's ํ’€์ด

 

ํ•ต์‹ฌ: ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ• ์ค„ ์•„๋Š”๊ฐ€?

 

๋จผ์ € ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

 

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ ์•Œ๋ฉด ์ด ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

์ฒ˜์Œ ๋‘ ์ˆซ์ž์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ ๋‹ค์Œ์— ๋ฐฐ์—ด์•ˆ์— ๊ทธ ๋‹ค์Œ ์ˆซ์ž์™€ ๊ทธ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค!!

 

์ด๋ ‡๊ฒŒ ๋งํ•˜๋ฉด ์ดํ•ดํ•˜๊ธฐ ํž˜๋“œ๋‹ˆ ์˜ˆ์ œ๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

2,6,8,14๋ผ๋Š” ์ˆซ์ž๊ฐ€ ์žˆ๋‹ค๋ฉด ๋จผ์ € ์ฒ˜์Œ ๋‘ ์ˆซ์ž 2์™€ 6์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค. -> 6

 

๊ทธ๋ฆฌ๊ณค ๋ฐฐ์—ด์•ˆ์˜ ๊ทธ ๋‹ค์Œ ์ˆซ์ž 8๊ณผ ๋ฐฉ๊ธˆ ๊ตฌํ•ด์คฌ๋˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์ธ 6์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•ด์ค๋‹ˆ๋‹ค -> 24

 

์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋งˆ์ง€๋ง‰์— 24์™€ 14์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๊ฐ€ ์ •๋‹ต์ด ๋ฉ๋‹ˆ๋‹ค. -> 168

 

๋จผ์ € ๋ฐฐ์—ด์•ˆ์˜ ์ฒซ๋ฒˆ์งธ๊ฐ’๊ณผ ๋‘๋ฒˆ์งธ๊ฐ’์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋กœ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. -> var nLCM = lcm(arr[0], arr[1])

 

for๋ฌธ์œผ๋กœ 2๋ถ€ํ„ฐ arrํฌ๊ธฐ๋งŒํผ ๋ฐ˜๋ณตํ•ด์ฃผ๊ณ  (2๋ถ€ํ„ฐ ํ•˜๋Š” ์ด์œ ๋Š” ์ฒซ๋ฒˆ์งธ์™€ ๋‘๋ฒˆ์งธ๋Š” ์ด๋ฏธ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ–ˆ์œผ๋ฏ€๋กœ) -> for i in 2..<arr.count{ ... }

 

nLCM์— ๊ทธ ์ „์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ ๋‹ค์Œ ์ˆซ์ž์™€์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•ด ๊ฐ’์„ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค. -> nLCM = lcm(nLCM, arr[i])

 

๋งˆ์ง€๋ง‰ nLCM์„ ๋ฐ˜ํ™˜ํ•ด์ค๋‹ˆ๋‹ค. -> return nLCM

 

์ „์ฒด์ฝ”๋“œ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
func solution(_ arr:[Int]) -> Int {
    
    var nLCM = lcm(arr[0], arr[1])
    
    for i in 2..<arr.count{
        nLCM = lcm(nLCM, arr[i])
    }
    
    return nLCM
}
 
func gcd(_ a: Int, _ b: Int-> Int {
    let mod: Int = a % b
    return 0 == mod ? min(a, b) : gcd(b, mod)
}
 
func lcm(_ a: Int, _ b: Int-> Int {
    return a * b / gcd(a, b)
}

 

๋‹ค๋ฅธ์‚ฌ๋žŒ ํ’€์ด 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
func gcd(_ a: Int, _ b: Int-> Int {
  let r = a % b
  if r != 0 {
    return gcd(b, r)
  } else {
    return b
  }
}
 
func lcm(_ m: Int, _ n: Int-> Int {
  return m / gcd(m, n) * n
}
func solution(_ arr:[Int]) -> Int {
    return arr.reduce(1) { lcm($0, $1) }
}

๋ฐฐ์šด ๊ฒƒ

์ €๊ฐ™์€ ๊ฒฝ์šฐ์—” for๋ฌธ๊ณผ nLCM์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ฐ’์„ ๊ตฌํ–ˆ์ง€๋งŒ

๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ ๊ฐ„๋‹จํ•˜๊ฒŒ reduce๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€