์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 12953] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ (Javascript)

์€์ง„ 2021. 6. 23. 17:39

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

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป๋ฌธ์ œ๋งํฌ

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 12953] N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ (Javascript)
๋ฌธ์ œ ์„ค๋ช…
๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(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

โœ๏ธIdea Sketch

2021-06-23

1. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ GCD (Greatest Common Divisor), ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ LCM (Least Common Multiple)
2. ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•
  • ์‹œ๊ฐ„๋ณต์žก๋„ : O(logN)
3. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ GCD ๊ตฌํ•˜๊ธฐ
  • GCD(A, B) = GCD(B, A%B)
  • A%B๊ฐ€ 0์ด๋˜๋Š” ์ˆœ๊ฐ„ ์ข…๋ฃŒ
4. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ LCM ๊ตฌํ•˜๊ธฐ
  • (๋‘ ์ˆ˜์˜ ๊ณฑ) ๋‚˜๋ˆ„๊ธฐ (์ตœ๋Œ€๊ณต์•ฝ์ˆ˜)
  • LCM = A*B / GCD
function solution(n, m) {
  let lcm = n*m;
  while(m%n) [m, n] = [n, m%n];  // 3
  return [n, lcm/n];  // 4
}
5. ์ˆซ์ž๊ฐ€ 2๊ฐœ๋ฅผ ์ดˆ๊ณผํ•  ๊ฒฝ์šฐ ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•, ๊ฐ€๋Šฅํ•œ๊ฐ€?
  • A, B์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๊ทธ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ C์™€์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
  • ๊ทธ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์™€ D์™€์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.
6. ๋‘ ์ˆ˜์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ returnํ•˜๋Š” LCM() ํ•จ์ˆ˜ ์ƒ์„ฑ
7. LCM() ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’๊ณผ ๊ทธ ๋‹ค์Œ arr๊ฐ’์„ ๋Œ€์ƒ์œผ๋กœ LCM() ํ•จ์ˆ˜ ์‹คํ–‰
  • arr ๋๊นŒ์ง€ ๋ฐ˜๋ณต

 

โœ๏ธ์†Œ์Šค์ฝ”๋“œ

2021-06-23 ์ •ํ™•์„ฑ ํ†ต๊ณผ

function LCM(m, n) {
  let lcm = m * n;
  while (m % n) [m, n] = [n, m % n];
  return lcm / n;
}

function solution(arr) {
  let lcm = LCM(arr[0], arr[1]);
  for (let i = 2; i < arr.length; i++) lcm = LCM(lcm, arr[i]);
  return lcm;
}

 

โœ๏ธ๋ช…๋‹ต

5๋ฒˆ์„ arr.reduce๋กœ ๊ตฌํ˜„ํ•จ

์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•ด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ GCD() ํ•จ์ˆ˜๋ฅผ ์ง๊ด€์ ์œผ๋กœ ๊ตฌํ˜„ํ•จ

function nlcm(num) {
 return num.reduce((a,b) => a*b / gcd(a,b))  
}

function gcd(a, b) {
  return a % b ? gcd(b, a%b) : b
}