[TIL] 카테고리/알고리즘 문제풀기

[자바스크립트] 프로그래머스 Lv.1 최대공약수와 최소공배수

티레이니 2022. 5. 23. 22:30

 

주어진 두 수의 최대공약수와 최소공배수를 구해 배열에 넣어야 하는 문제.

이번에도 수학 몰라서 당하고 싶진 않았으므로 두 수의 관계를 검색해본다...

 

두 자연수의 곱은 최대공약수 * 최소 공배수 라고 한다!! (지식+1)

 

따라서, 둘 중 하나를 먼저 구해보기로 하고, 쉬워보이는 최대공약수를 공략해본다.

 

let answer = []

for (i=n; i>0; i--) {  // 한 숫자에서 시작해서 1씩 줄여가며 반복
  if( m % i === 0 && n % i === 0) { // 최대 공약수를 발견하면
    console.log(i)
    answer.push(i) // 정답배열에 넣고
    break; // 바로 반복문을 종료해요
  }
}

answer.push(n*m/answer[0])  // 두 수를 곱한것을 최대공약수로 나누면 최소공배수를 구할 수있음

 

또 또 for과 if로 끝냈지만 우선 만족하고 (....) 돌려본다!

역시 통과지만 속도가 느리다. 점수도 2점.

 

다른 사람들의 답변을 찾아봤다

 

 

function gcdlcm(a, b) {
    var r;
    for(var ab= a*b;r = a % b;a = b, b = r){}
    return [b, ab/b];
}

 

.....!!!!!>......... 졌다............

쓴 사람 혹시 천재인가...?

 

똑같이 for문 써도 이렇게 예쁘게 나올수도 있구나..

발전없는 내 풀이 반성해 ㅠㅠ...

 

 

https://programmers.co.kr/learn/courses/30/lessons/12940

 

코딩테스트 연습 - 최대공약수와 최소공배수

두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의

programmers.co.kr