-
[프로그래머스] 분수의 덧셈카테고리 없음 2023. 3. 13. 20:53
* 후기
: x같을뻔.. 유클리드 호제법으로 풀려고했는데, 이 과정에서 아주 난리가 났었어서.. 저 방법을 쓰고도 엉터리에 이상하게 풀 뻔함
1. GCD 최대공약수
: 두 자연수의 공통된 약수 중 가장 큰 수를 의미한다.
2. LCM 최소공배수
: 두 자연수의 공통된 배수 중 가장 작은 수를 의미한다.
( 최소공배수 = 두 자연수의 곱 / 최대공약수)
3. 유클리드 호제법
:
https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C_%ED%98%B8%EC%A0%9C%EB%B2%95
유클리드 호제법 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 유클리드 호제법(-互除法, Euclidean algorithm) 또는 유클리드 알고리즘은 2개의 자연수 또는 정식(整式)의 최대공약수를 구하는 알고리즘의 하나이다. 호제법이란
ko.wikipedia.org
4. 위의 것들을 사용해 풀은 분수의 덧셈 Js 버전
const solution = (numer1, denom1, numer2, denom2) =>{ let gcdn = 0; function gcd(a, b){ while(b>0){ let temp = a; a = b; b = temp%b; } return a; } if(denom1%denom2 == 0){ gcdn = denom1; } else{ gcdn = gcd(denom2, denom1%denom2); } const botNum = denom1*denom2; const topNum = (numer1*denom2) + (numer2*denom1); const regcdn = gcd(topNum, botNum); return [topNum/regcdn, botNum/regcdn] }
5. 다른 사람 풀이
function fnGCD(a, b){ return (a%b)? fnGCD(b, a%b) : b; } function solution(denum1, num1, denum2, num2) { let denum = denum1*num2 + denum2*num1; let num = num1 * num2; let gcd = fnGCD(denum, num); //최대공약수 return [denum/gcd, num/gcd]; }
// 아니, 하.. 위에처럼 졸라 간단하게 수를 쓸 수 있었음.... 하... 개빡춍,, 다시 들여다봐야겠음