당근먹는하니
귀엽고 행복해
당근먹는하니
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 다람쥐🐿 (26)
    • C++ 공부빵야 (7)
    • 공부👻 (5)
    • 프론트엔드✏️ (228)
      • 코드캠프 (120)
      • 팀 프로젝트✨ (31)
      • 개인공부 (67)
    • 프론트엔드 - 바닐라js (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • CSS
  • 코딩
  • graphql
  • 코딩 부트캠프
  • 프론트엔드
  • 공통 컴포넌트
  • 리액트
  • JS
  • react
  • 회고
  • refreshtoken
  • 자바스크립트
  • 코드캠프
  • algorithm
  • javascrpit
  • 팀플
  • React-hook-form
  • ssg
  • emotion
  • next.js
  • 알고리즘
  • 팀프로젝트
  • 부트캠프
  • 배열
  • HTML
  • typescript
  • 프로그래머스
  • 팀 프로젝트
  • 배포
  • javascript

최근 댓글

최근 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
당근먹는하니

귀엽고 행복해

프론트엔드✏️/코드캠프

알고리즘 - 최대공약수, 최소공배수 유클리드 호제법

2022. 6. 8. 18:56
728x90
반응형
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수, solution을 완성해 보세요. 배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다. 예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로 solution(3, 12)는 [3, 12]를 반환해야 합니다.

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

function gong(n, m) {
  // 최대공약수 : 두 수의 공통되는 약수 중에서 제일 큰 수
  // 최소공배수 : 두 수의 공통되는 배수 중에서 제일 작은 수
  const biggest = n > m ? n : m; 
  				// = Math.max(n , m);
  // 더 큰 값을 가져올거니까 큰 거 저장
  
  let max = 0; // 공약수 중에서 제일 큰 수가 저장된다.
  
  for (let i = 1; i <= biggest; i++) {
    // console.log(i, n%i, m%i)
    if(n%i === 0 && m % i === 0) {
      console.log(i, n, m)
      // i는 n과 m의 공약수다! 헉 대박... 
      max = i;
    }
    console.log(max)
    
    
   // 최소공배수 구하기
   // 초기값이 가장 큰 값이 들어오고 i는 비기스트의 배수들을 가져오게 되는거야
    let min = 0; // 공배수 중에서 제일 작은 수가 저장된다. 
    
    for(let i = biggest; i<= n*m ; i += biggest) {
      // console.log(i % Math.min(n, m) === 0 )
      if(i%Math.min(n,m) === 0) {
        return [max, i];
        // min = i;
        // break; 
      }
    }
    return [max,min];
  }

for문으로 풀기 🥹

 

 

🥸유클리드 호제법

 a를 b로 나눴을 때 (a가 b보다 클 경우) === 큰 수에서 작은 수를 나눴을 때

나머지 값이 0이 되면 작은 수(b)가 최대공약수가 된다.

 

나머지 값이 0이 되지 않으면, 큰 수(b)에 작은 수(a)를 할당하고

작은 수(b)에는 나눴던 나머지 값을 할당한다. 

 

반복해서 나머지 값이 0이 나오면, 이때 나눴던 작은 수(b)가 최대 공약수가 된다. 

 

let a = Math.max(n,m); //큰 수

let b = Math.min(n,m); // 작은 수

let r = 0; // a를 b로 나눴을 때의 나머지 값

while((a%b)>0) {

r = a % b; // 큰 수에서 작은 수를 나눈 나머지 값을 저장

a = b; // 큰 수는 나눴을 때의 작은 수를 할당

b = r; // 작은 수는 나머지 값을 할당

// 최소공배수 구하기 : 두 수를 곱한 값에 최대공약수를 나눈 값

return [b, (n*m) / b];

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글

알고리즘 - 피보나치 수열,  (0) 2022.06.09
220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰  (0) 2022.06.09
알고리즘 - 달력 문제, reduce, Date()  (0) 2022.06.07
220607 프론트엔드 부트캠프 28일차 : 다 함수야!, graphql 궁금, globalstate  (0) 2022.06.07
220606 프론트엔드 부트캠프 27일차 : 이미지 여러개, 검색, 디바운싱, 쓰로틀링  (0) 2022.06.07
    '프론트엔드✏️/코드캠프' 카테고리의 다른 글
    • 알고리즘 - 피보나치 수열,
    • 220608 프론트엔드 부트캠프 29일차: 로그인, 암호화, JWC 토큰
    • 알고리즘 - 달력 문제, reduce, Date()
    • 220607 프론트엔드 부트캠프 28일차 : 다 함수야!, graphql 궁금, globalstate
    당근먹는하니
    당근먹는하니

    티스토리툴바