알고리즘, 자료구조 6

[프로그래머스] 분수의 덧셈

[프로그래머스] 분수의 덧셈 function solution(denum1, num1, denum2, num2) { let answer = []; let denum = denum1 * num2 + num1 * denum2; // 분자 let num = num1 * num2; // 분모 function getGcd(a, b) { while ( b !== 0) { n = a % b; a = b; b = n; } return a; } const calcGcd = getGcd(denum, num); // 분자와 분모의 최대공약수 return [denum, num].map(v => v/calcGcd); } 최대공약수를 사용해서 분자와 분모의 초대공약수를 구해서 나눠 리턴한다. 최대공약수 구하는 방법은 이전 블로그 ..

[js] 최대 공약수, 최소공배수 구하기 (feat. 유클리드 호제법)

공약수는 두 개 이상의 자연수의 공통된 약수이고, 공약수 중에서 가장 큰 공약수를 바로 최대공약수라 하고, 두 수의 공약수가 1밖에 없을 때 이 두 수를 서로소라고 한다. 12와 18의 최대공약수는? 12의 약수: 1, 2, 3, 4, 6, 12 18의 약수: 1, 2, 3, 6, 9, 18 두 수의 공약수는 1, 2, 3, 6이고 이 중 가장 큰 공약수, 최대공약수가 6 유클리드 호제법을 이용한 풀이 - a, b 를 서로 나눌때, 나누어진다면 b가 최대 공약수 이다. (a>b) - 만약 a,b가 나누어지지 않으면 b와 a를 b로 나눈 나머지를 다시 나눈다 - 서로가 나누어지면 a%b 가 최대공약수이다. 나누어지지 않는다면 위처럼 b와 a를 b를 나눈 나머지를 다시 나눈다. const solutuon =..

순열

순열이란, 서로 다른 N개 중에서 R개를 선택하는 경우 (순서 중요👌 ) swap을 이용한 순열 만들기 /** * * @param {array} array * @param {number} deep * @param {number} target */ const permutation = (array, res = [], target = array.length, deep = 0) => { if (deep === target) { res.push(array.slice(0, target)); return; } for (let index = deep; index < array.length; index++) { swap(array, deep, index); permutation(array, res, target, dee..