ν‹°μŠ€ν† λ¦¬ λ·°

문제

두 수λ₯Ό μž…λ ₯λ°›μ•„ 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜μ™€ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ λ³΄μ„Έμš”. λ°°μ—΄μ˜ 맨 μ•žμ— μ΅œλŒ€κ³΅μ•½μˆ˜, κ·Έλ‹€μŒ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ„£μ–΄ λ°˜ν™˜ν•˜λ©΄ λ©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 두 수 3, 12의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 3, μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 12μ΄λ―€λ‘œ solution(3, 12)λŠ” [3, 12]λ₯Ό λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.μ œν•œ 사항

  • 두 μˆ˜λŠ” 1이상 1000000μ΄ν•˜μ˜ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

μž…μΆœλ ₯ 예

nmreturn

3 12 [3, 12]
2 5 [1, 10]

μž…μΆœλ ₯ 예 μ„€λͺ…

μž…μΆœλ ₯ 예 #1
μœ„μ˜ μ„€λͺ…κ³Ό κ°™μŠ΅λ‹ˆλ‹€.

μž…μΆœλ ₯ 예 #2
μžμ—°μˆ˜ 2와 5의 μ΅œλŒ€κ³΅μ•½μˆ˜λŠ” 1, μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 10μ΄λ―€λ‘œ [1, 10]을 리턴해야 ν•©λ‹ˆλ‹€.

 

λ¬Έμ œν’€μ΄

μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•(Euclidean-Algorithm)

  • 두 수의 μ΅œλŒ€κ³΅μ•½μˆ˜(GCD)λ₯Ό κ΅¬ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
  • ν˜Έμ œλ²•: 두 μˆ˜κ°€ μ„œλ‘œ μƒλŒ€λ°© 수λ₯Ό λ‚˜λˆ„μ–΄μ„œ κ²°κ΅­ μ›ν•˜λŠ” 수λ₯Ό μ–»λŠ” μ•Œκ³ λ¦¬μ¦˜

MOD μ—°μ‚°

  • μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œ μ„ μ œλ˜λŠ” μ—°μ‚°
  • 두 값을 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό κ΅¬ν•˜λŠ” μ—°μ‚°

0이상인 두 개의 μ •μˆ˜ 쀑 큰 수λ₯Ό μž‘μ€ 수둜 λ‚˜λˆˆ λ‚˜λ¨Έμ§€λ₯Ό κ΅¬ν•œλ‹€(MOD μ—°μ‚°)

12 mod 5 = 2

 

이후, λ‚˜λˆ΄λ˜ μˆ˜μ™€ λ‚˜λ¨Έμ§€λ₯Ό 톡해 λ‹€μ‹œ mod 연산을 ν•œλ‹€(κ³Όμ • 반볡)

5 mod 2 = 1
2 mod 1 = 0

 

λ‚˜λ¨Έμ§€ 값이 0이 λ˜μ—ˆμ„ λ•Œ, λ§ˆμ§€λ§‰ μ—°μ‚°μ—μ„œ λ‚˜λˆ„λŠ” 수둜 μ‚¬μš©λœ 1이 12와 5의 μ΅œλŒ€κ³΅μ•½μˆ˜κ°€ λœλ‹€.

 

결과적으둜 λ°˜λ³΅λ˜λŠ” mod연산을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ‹€μŒκ³Ό 반볡문 및 μž¬κ·€ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

 

반볡문

function GCD(a, b){
  let tmp;
  while(b){      
    tmp = a % b;
    a = b;
    b = tmp;
  }
  return a;
}
//a > b

 

μž¬κ·€ν•¨μˆ˜

function GCD(a, b) {
  if(b === 0) return a;
  else return GCD(b, a % b);
}
// a > b

 

μ΄λ ‡κ²Œ κ΅¬ν•œ μ΅œλŒ€κ³΅μ•½μˆ˜(GCD)의 값이 μ„ μ œλ˜λ©΄, μ΅œμ†Œκ³΅λ°°μˆ˜(LCM)λŠ” λ‹€μŒκ³Ό 같은 연산을 톡해 μ‰½κ²Œ ꡬ할 수 μžˆλ‹€.

(μ΅œμ†Œκ³΅λ°°μˆ˜) = (두 μžμ—°μˆ˜μ˜ κ³±) / (μ΅œλŒ€κ³΅μ•½μˆ˜)

 

ν‘œλ₯Ό 톡해 확인해보기 

 

SQ GCD(a, b) a b tmp(a % b)
1 GCD(12, 5) 12 5 2
2 GCD(5, 2) 5 2 1
3 GCD(2, 1) 2 0

 

μ½”λ“œ

function GCD(a, b) {
  if(a === 0) return b;
  else return GCD(b % a, a);
}

function solution(n, m) {
  let answer = [];
  answer[0] = GCD(n, m);
  answer[1] = n * m / GCD(n, m);
  return answer;
}
λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
TAG
more
Β«   2024/10   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
κΈ€ 보관함