[프로그래머스] N개의 최소공배수 | JavaScript

예구·2023년 7월 15일
0

Algorithm

목록 보기
11/47
post-thumbnail

문제출처

1. 문제

문제 설명

두 수의 최소공배수(Least Common Multiple)란 입력된 두 수의 배수 중 공통이 되는 가장 작은 숫자를 의미합니다. 예를 들어 2와 7의 최소공배수는 14가 됩니다. 정의를 확장해서, n개의 수의 최소공배수는 n 개의 수들의 배수 중 공통이 되는 가장 작은 숫자가 됩니다. n개의 숫자를 담은 배열 arr이 입력되었을 때 이 수들의 최소공배수를 반환하는 함수, solution을 완성해 주세요.

제한 사항

  • arr은 길이 1이상, 15이하인 배열입니다.
  • arr의 원소는 100 이하인 자연수입니다.

입출력 예

arrresult
[2,6,8,14]168
[1,2,3]6



2. 풀이

처음에는 arr을 내림차순으로 정렬한 후, ansarr의 각 원소로 나눴을 때 나머지가 0이 될 때까지 ans를 1 증가시키는 방법을 생각했다. 하지만 이 코드의 문제점은 최소공배수를 찾는 방법이라기 보다는 count를 하는 코드라는 점이다. 따라서 예시 코드도 통과하지 못했다.

// 틀린 코드

function solution(arr) {
  let ans = 1;
  arr
    .sort((a, b) => b-a)
    .map((e) => {
      while (true) {
        if (ans % e === 0) break;
          console.log(ans)
        ans += 1;
      }
    });
  return ans;
}

이후 최소공배수를 반환하는 함수를 따로 작성하였고, ans의 초기값을 arr[0]으로 초기화하여 최소공배수를 찾는 방식으로 코드를 작성했다. 어렵게 생각하지 말고 쉽게 생각하면 풀 수 있는 문제였다.

// 최소공배수 찾는 함수
function getLCM(n, m) {
  let lcm = 1;
  while (true) {
    if (lcm % n === 0 && lcm % m === 0) break;
    lcm += 1;
  }
  return lcm;
}

function solution(arr) {
  let ans = arr[0];
  for (let i = 1; i < arr.length; i++) {
    ans = getLCM(ans, arr[i]);
  }
  return ans;
}
profile
우당탕탕 FE 성장기

0개의 댓글

관련 채용 정보