Jieunny의 λΈ”λ‘œκ·Έ

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - N개의 μ΅œμ†Œκ³΅λ°°μˆ˜ λ³Έλ¬Έ

Study/Coding Test

[JS] ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ - N개의 μ΅œμ†Œκ³΅λ°°μˆ˜

Jieunny 2023. 2. 17. 13:15

πŸ“Œ  문제

두 수의 μ΅œμ†Œκ³΅λ°°μˆ˜(Least Common Multiple)λž€ μž…λ ₯된 두 수의 배수 쀑 곡톡이 λ˜λŠ” κ°€μž₯ μž‘μ€ 숫자λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ 2와 7의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” 14κ°€ λ©λ‹ˆλ‹€. μ •μ˜λ₯Ό ν™•μž₯ν•΄μ„œ, n개의 수의 μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” n 개의 μˆ˜λ“€μ˜ 배수 쀑 곡톡이 λ˜λŠ” κ°€μž₯ μž‘μ€ μˆ«μžκ°€ λ©λ‹ˆλ‹€. n개의 숫자λ₯Ό 담은 λ°°μ—΄ arr이 μž…λ ₯λ˜μ—ˆμ„ λ•Œ 이 μˆ˜λ“€μ˜ μ΅œμ†Œκ³΅λ°°μˆ˜λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜, solution을 μ™„μ„±ν•΄ μ£Όμ„Έμš”.μ œν•œ 사항

  • arr은 길이 1이상, 15μ΄ν•˜μΈ λ°°μ—΄μž…λ‹ˆλ‹€.
  • arr의 μ›μ†ŒλŠ” 100 μ΄ν•˜μΈ μžμ—°μˆ˜μž…λ‹ˆλ‹€.

 

πŸ’‘  아이디어

처음 ν’€μ΄λŠ” μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ„ μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ„œ 정말정말정말 λΉ„νš¨μœ¨μ μΈ μ½”λ“œ..

λ‘λ²ˆμ§ΈλŠ” μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•μ„ μ΄μš©ν•΄μ„œ μ΅œλŒ€κ³΅μ•½μˆ˜λ₯Ό κ΅¬ν•˜κ³ , 'μ΅œμ†Œκ³΅λ°°μˆ˜ = (a * b) / μ΅œλŒ€κ³΅μ•½μˆ˜' λΌλŠ” 점을 μ΄μš©ν•œ 풀이

 

✏️  풀이

1. while을 μ“°κ³ , κ·Έλ•Œλ§ˆλ‹€ for문을 λŒμ•„μ•Όν•˜λŠ” 풀이..

λ‹Ήμ—°νžˆ μ΅œμ†Œκ³΅λ°°μˆ˜λŠ” λ°°μ—΄μ—μ„œ κ°€μž₯ 큰 수의 배수라고 μƒκ°ν•˜κ³  κ·Έ 값을 *2, *3 ν•΄μ£Όλ©΄μ„œ λ°°μ—΄ μ•ˆμ˜ μš”μ†Œλ“€λ‘œ λ‚˜λˆ μ§€λŠ”μ§€ 확인

function solution(arr) {
  var answer = 0;
  let max = arr[arr.length-1];
  let returnValue = dividedReturn(arr, max);
  
  while(returnValue === false){
    returnValue = dividedReturn(arr, max);
    max = max * 2;
  }
  answer = max / 2;
  
  return answer;
}

function dividedReturn(arr, max) {
  arr.sort((a,b)=>a-b);
  let divided = true;

  for(let i=0; i<arr.length-1; i++){
    if(max % arr[i] !== 0) {
      divided = false; 
      break;
    }
  } 

  return divided;
}

 

2. μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²• 풀이

function solution(arr) {
  let answer = 1;
  for(let i of arr){
    answer = minMulti(answer, i);
  }
  
  return answer;
}

function minMulti(a, b){  // μ΅œμ†Œκ³΅λ°°μˆ˜ κ΅¬ν•˜κΈ°
  return (a*b) / gcd(a,b);
}

function gcd(a, b) { // μ΅œλŒ€κ³΅μ•½μˆ˜ κ΅¬ν•˜κΈ°
  const remainder = a % b;  
  if (remainder === 0) return b;  
  return gcd(b, remainder);  
}