๋ฐ˜์‘ํ˜•

N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜


ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ ˆ๋ฒจ 2์˜ 12953๋ฒˆ ๋ฌธ์ œ๋Š” N๊ฐœ์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋‹ค. ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” ์ž…๋ ฅ๋œ ๋‘ ์ˆ˜์˜ ๋ฐฐ์ˆ˜ ์ค‘ ๊ณตํ†ต์ด ๋˜๋Š” ๊ฐ€์žฅ ์ž‘์€ ์ˆซ์ž๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 2์™€ 7์˜ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋Š” 14๊ฐ€ ๋œ๋‹ค.

 

์ฃผ์–ด์ง„ ๋ฐฐ์—ด(arr)์—์„œ ๊ฐ€์žฅ ํฐ ์ˆ˜์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋‚˜๋จธ์ง€ ์š”์†Œ์™€ ๋‚˜๋ˆด์„ ๋•Œ ๋ชจ๋‘ 0์ด ๋˜๋Š” ์ˆ˜๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ’€์—ˆ์ง€๋งŒ, ๋งค๋ฒˆ ํฐ ์ˆ˜๋ฅผ ์ œ์™ธํ•œ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ˆซ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ๋‚˜๋ˆ ๋ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค. ๋ฐฐ์—ด ์ •๋ ฌ์„ ์ œ์™ธํ•˜๊ณ  ๋ฐฐ์—ด ๊ธธ์ด๊ฐ€ n, while๋ฌธ์˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜๊ฐ€ x์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” $O(n \cdot x)$๊ฐ€ ๋œ๋‹ค.

function solution(arr) {
  const sortedArray = arr.sort((a, b) => b - a);
  const [biggest, ...rest] = sortedArray;

  const isDivisible = (target) => rest.every((n) => target % n === 0);

  let lcmFound = false;
  let multiplier = 1;
  let leastCommonMultiple = -1;

  while (!lcmFound) {
    const currentNum = biggest * multiplier;
    lcmFound = isDivisible(currentNum);
    if (lcmFound) leastCommonMultiple = currentNum;
    multiplier++;
  }

  return leastCommonMultiple;
}

solution([1, 2, 3]); // 6
// 1: 1, 2, 3, 4, 5, 6, ...
// 2: 2, 4, 6, 8, ...
// 3: 3, 6, 9, 12, ...

 

์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜


๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋˜ ์ค‘, ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด (๋Œ€๋žต)๋กœ๊ทธ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค. a, b ๋‘ ์ˆ˜์˜ ๊ณฑ์„, ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋กœ ๋‚˜๋ˆ ์„œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

// ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(Greatest Common Divisor, GCD) ์ฐพ๊ธฐ
function gcd(a, b) {
  if (b === 0) return a;
  return gcd(b, a % b);
}

// ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(Least Common Multiple, LCM) ์ฐพ๊ธฐ
function lcm(a, b) {
  return (a * b) / gcd(a, b);
}

function solution(arr) {
  let result = arr[0];

  for (let i = 1; i < arr.length; i++) {
    result = lcm(result, arr[i]);
  }

  return result;
}

solution([1, 2, 3]); // 6

 

์œ„ ์ฝ”๋“œ์—์„œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ถ€๋ถ„์— ์œ ํด๋ฆฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ ์šฉ๋๋‹ค. ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ๋‘ ์ˆ˜(ํ˜น์€ ๊ทธ ์ด์ƒ)๊ฐ€ ๊ณตํ†ต์œผ๋กœ ๊ฐ€์ง€๋Š” ์•ฝ์ˆ˜ ์ค‘ ๊ฐ€์žฅ ํฐ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค(๋‘ ์ˆ˜๊ฐ€ ๋™์‹œ์— ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” ๊ฐ€์žฅ ํฐ ์ˆ˜). ์•ฝ์ˆ˜๋Š” ์–ด๋–ค ์ˆ˜๋ฅผ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๊ฒŒ ํ•˜๋Š” ์ˆ˜(๋‚˜๋จธ์ง€ 0)์ด๋‹ค.

 

๐Ÿ’ก mod๋Š” ๋‚˜๋จธ์ง€ ์—ฐ์‚ฐ์„ ์˜๋ฏธํ•œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ % ์—ฐ์‚ฐ์ž์™€ ๋™์ผํ•˜๋‹ค.

 

์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•์€ a, b ๋‘ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ b์™€ a mod b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” a, b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค๋Š” ํŠน์„ฑ์„ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฆ‰, ๋‘ ์ •์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋‘ ์ •์ˆ˜๋ฅผ ์ž‘๊ฒŒ ๋งŒ๋“œ๋Š” ์›๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 172์™€ 36์„ ๋ณด์ž. ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 4์ด๋‹ค. 4์™€ 24์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋„ 4์ด๋‹ค.
4์™€ 24์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” ์ตœ๋Œ€ 4๋ฅผ ๋„˜์„ ์ˆ˜ ์—†๋‹ค. 24= 4 · 6. ๋”ฐ๋ผ์„œ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” 4์ด๋‹ค.
172์™€ 36์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ 4์ž„์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 4์™€ 24์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๊ฐ€ 4์ž„์„ ๋ณด์ด๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค.
์™œ ๊ทธ๋Ÿด๊นŒ? ๊ทธ๊ฒƒ์€ 172, 36๋ณด๋‹ค 4, 24์˜ ํฌ๊ธฐ๊ฐ€ ๋” ์ž‘๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋”ฐ๋ผ์„œ 172์™€ 36์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ, ๋‘ ์ˆ˜ 172, 36์„ ๋” ์ž‘๊ฒŒ ๋งŒ๋“ ๋‹ค๋ฉด,
172์™€ 36์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

<์ˆ˜ํ•™์˜ ์ˆจ์€ ์›๋ฆฌ> ไธญ

 

 

์ฐธ๊ณ ๋กœ a๊ฐ€ b๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ํ•ญ์ƒ ์ฒซ ๋ฒˆ์งธ ์žฌ๊ท€ ํ˜ธ์ถœ์—์„œ a์™€ b์˜ ์œ„์น˜๊ฐ€ ๋ฐ”๋€๋‹ค. ๋”ฐ๋ผ์„œ ๋‘ ์ธ์ž์˜ ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

 

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜์˜ ๊ด€๊ณ„


์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(LCM)๋Š” ํŠน๋ณ„ํ•œ ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋‹ค. a, b ๋‘ ์ˆ˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ a,b์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณฑํ•œ ๊ฐ’์€ a, b๋ฅผ ๊ณฑํ•œ ๊ฐ’๊ณผ ๋™์ผํ•˜๋‹ค.

 

$$a \times b=GCD(a,b) \times LCM(a,b)$$

 

์˜ˆ๋ฅผ๋“ค์–ด a๊ฐ€ 48, b๊ฐ€ 18๋ผ๋ฉด, ์ด ๋‘ ์ˆ˜์˜ ๊ณฑ์€ 864์ด๊ณ , ์ด๋Š” ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ 6๊ณผ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ 144๋ฅผ ๊ณฑํ•œ ๊ฐ’๊ณผ ๊ฐ™๋‹ค.

 

$$\begin{align*}a &= 48, \quad b = 18 \\a \times b &= 864 \\\text{GCD}(48, 18) &= 6 \\\text{LCM}(48, 18) &= 144 \\\text{GCD}(48, 18) \times \text{LCM}(48, 18) &= 864\end{align*}$$

 

์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‘ ์ˆ˜์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

 

โถ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜ ๊ตฌํ•˜๊ธฐ

$$LCM(a,b)=\frac{a \times b}{GCD(a,b)}$$

 

โท ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ ๊ตฌํ•˜๊ธฐ

$$GCD(a,b)=\frac{a \times b}{LCM(a,b)}$$

 

์œ„ ๋‚ด์šฉ์„ ์ฝ”๋“œ๋กœ ํ’€์–ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 48(a)๊ณผ 18(b)์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ 6์„ ์•Œ๊ณ  ์žˆ์„ ๋•Œ ์ด ๋‘˜์˜ ๊ณฑ 864๋ฅผ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜ 6์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

// ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(Greatest Common Divisor, GCD) ์ฐพ๊ธฐ
function gcd(a, b) {
  if (b === 0) return a;
  return gcd(b, a % b);
}

// ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(Least Common Multiple, LCM) ์ฐพ๊ธฐ
function lcm(a, b) {
  return (a * b) / gcd(a, b);
}

 

์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋กœ GCD / LCM ๊ณ„์‚ฐํ•˜๊ธฐ


์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋Š” ์ฃผ์–ด์ง„ ์ •์ˆ˜๋ฅผ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†๋Š” ์†Œ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

์†Œ์ˆ˜๋Š” 1๊ณผ ์ž๊ธฐ ์ž์‹ ๋งŒ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€๋Š” 1๋ณด๋‹ค ํฐ ์ž์—ฐ์ˆ˜๋กœ 2, 3, 5, 7, 11 ๋“ฑ์ด ์žˆ๋‹ค. ์†Œ์ธ์ˆ˜๋Š” ์–ด๋–ค ์ •์ˆ˜๋ฅผ ์†Œ์ˆ˜๋“ค์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์†Œ์ˆ˜๋“ค์„ ๋งํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด 48์„ ์†Œ์ธ์ˆ˜๋ถ„ํ•ดํ•˜๋ฉด 2โด × 3์ด ๋˜๊ณ , ์ด๋•Œ ์†Œ์ธ์ˆ˜๋Š” 2, 3์ด๋‹ค.

 

์†Œ์ธ์ˆ˜๋ถ„ํ•ด๋Š” ๊ฐ€์žฅ ์ž‘์€ ์†Œ์ˆ˜์ธ 2๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋‚˜๋ˆ„๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ’(๋ชซ)์„ ๊ธฐ๋กํ•œ๋‹ค. 2๋กœ ๋” ์ด์ƒ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด ๊ทธ ๋‹ค์Œ ์†Œ์ˆ˜์ธ 3์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์‹œ๋„ํ•œ๋‹ค. ์ฃผ์–ด์ง„ ์ˆซ์ž๋ฅผ ๋” ์ด์ƒ ๋‚˜๋ˆŒ ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

48, 18 ์†Œ์ธ์ˆ˜๋ถ„ํ•ด ์˜ˆ์‹œ

์•„๋ž˜๋Š” ์ฃผ์–ด์ง„ ์ •์ˆ˜ n์˜ ์†Œ์ธ์ˆ˜๋ฅผ ์ฐพ์•„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜. primeFactors ํ•จ์ˆ˜์—์„œ remainder๊ฐ€ i๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š์œผ๋ฉด i๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋Š”๋ฐ, ์ด๋•Œ i๊ฐ€ ์†Œ์ˆ˜์ธ์ง€ ๋”ฐ๋กœ ํŒ๋ณ„ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

const primeFactors = (n) => {
  const result = [];
  let remainder = n;
  let i = 2;

  while (remainder > 1) {
    if (remainder % i === 0) {
      result.push(i);
      remainder /= i;
    } else i++;
  }

  return result;
};

const getFactorsWithExponents = (n) => {
  const factors = primeFactors(n); // [ 2, 2, 2, 2, 3 ]
  return factors.reduce((acc, cur) => {
    acc[cur] = (acc[cur] ?? 0) + 1;
    return acc;
  }, {});
};

getFactorsWithExponents(48); // { 2: 4, 3: 1 } -> 2โด × 3


i๊ฐ€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ, ์˜ˆ๋ฅผ ๋“ค์–ด 4, 6, 8, 9 ๋“ฑ์˜ ์ˆซ์ž๋Š” ์ด๋ฏธ ์ด์ „ ๋‹จ๊ณ„์—์„œ ํ•ด๋‹น ์ˆซ์ž๋“ค์˜ ์†Œ์ธ์ˆ˜(2, 3, ...)๊ฐ€ remainder๋ฅผ ๋‚˜๋ˆ„์—ˆ๊ธฐ ๋•Œ๋ฌธ์— remainder๋Š” ๋” ์ด์ƒ i๋กœ ๋‚˜๋ˆ„์–ด ๋–จ์–ด์ง€์ง€ ์•Š๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ i๊ฐ€ ์†Œ์ˆ˜๊ฐ€ ์•„๋‹Œ ์ˆซ์ž์ผ ๋• ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ๋œ๋‹ค.

 

์ตœ๋Œ€๊ณต์•ฝ์ˆ˜

์†Œ์ธ์ˆ˜๋ถ„ํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜(GCD)์™€ ์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜(LCM)๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

๋‘ ์ˆ˜์˜ ๊ณตํ†ต ์†Œ์ธ์ˆ˜๋“ค ์ค‘์—์„œ, ์ตœ์†Œ ์ง€์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ณฑํ•œ ๊ฐ’

 

 

const gcd = (a, b) => {
  const factorsA = getFactorsWithExponents(a); // { 2: 4, 3: 1 }
  const factorsB = getFactorsWithExponents(b); // { 2: 1, 3: 2 }
  let result = 1;

  for (const factor in factorsA) {
    // ํ”„๋กœํ† ํƒ€์ž… ์ฒด์ธ์œผ๋กœ ์ƒ์†๋œ ์†์„ฑ์ด ๊ฐ์ฒด ์†์„ฑ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์กฐ๊ฑด
    if (Object.hasOwn(factorsA, factor)) {
      const [A, B] = [factorsA[factor], factorsB[factor]];
      if (A && B) result *= factor ** Math.min(A, B);
    }
  }

  return result;
};

gcd(48, 18); // 6

 

๐Ÿ” Object.hasOwn, Object.prototype.hasOwnProperty ๋‘ ๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด๊ฐ€ ํŠน์ • ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. ํ•˜์ง€๋งŒ Object.hasOwn์€ Object์˜ ์ •์  ๋ฉ”์„œ๋“œ์—ฌ์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(์žฌ์ •์˜) ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Object.prototype.hasOwnProperty๋Š” ์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ ๋ฉ”์„œ๋“œ์— ์˜ํ–ฅ์„ ๋ฐ›์•„ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ์žˆ๋‹ค.

const user = {
  age: 30,
  hasOwnProperty: () => 'user์— ์ •์˜๋œ hasOwnProperty',
  hasOwn: () => 'user์— ์ •์˜๋œ hasOwn',
};

console.log(Object.hasOwn(user, 'age')); // true
console.log(user.hasOwnProperty('age')); // 'user์— ์ •์˜๋œ hasOwnProperty'

 

์ตœ์†Œ๊ณต๋ฐฐ์ˆ˜

๋‘ ์ˆ˜๊ฐ€ ๊ฐ–๋Š” ๋ชจ๋“  ์†Œ์ธ์ˆ˜๋“ค ์ค‘์—์„œ, ์ตœ๋Œ€ ์ง€์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ ๊ณฑํ•œ ๊ฐ’

 

 

const lcm = (a, b) => {
  const factorsA = getFactorsWithExponents(a); // { 2: 4, 3: 1 }
  const factorsB = getFactorsWithExponents(b); // { 2: 1, 3: 2 }
  let result = 1;

  const allFactors = { ...factorsA, ...factorsB }; // { 2: 1, 3: 2 }

  for (const factor in allFactors) {
    if (Object.hasOwn(allFactors, factor)) {
      const [A, B] = [factorsA[factor], factorsB[factor]];
      result *= factor ** Math.max(A ?? 0, B ?? 0);
    }
  }

  return result;
};

lcm(48, 18); // 144

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•