✔ 프로그래머스 0단계 : 분수의 덧셈
코딩테스트 연습 > 코딩테스트 입문 > 분수의 덧셈
❓ 문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 denum1, num1,두 번째 분수의 분자와 분모를 뜻하는 denum2, num2가 매개변수로 주어집니다.
두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
❗ 제한 사항
0 <denum1, num1, denum2, num2 < 1,000
🍖 입출력 예
denum1 | num1 | denum2 | num2 | result |
---|---|---|---|---|
1 | 2 | 3 | 4 | [5,4] |
9 | 2 | 1 | 3 | [29,6] |
🍙 입출력 예 설명
입출력 예 #1
1 / 2 + 3 / 4 = 5 / 4입니다. 따라서 [5, 4]를 return 합니다.
입출력 예 #2
9 / 2 + 1 / 3 = 29 / 6입니다. 따라서 [29, 6]을 return 합니다.
⏳ 문제 풀이
function solution(denum1, num1, denum2, num2) {
let top = denum1 * num2 + denum2 * num1;
// 분자 구하기
let bot = num1 * num2;
// 분모 구하기
// 유클리드 호제법. 최대공약수 구하기
let a = top;
let b = bot;
while(a % b !== 0){
let r = a % b;
if(r !== 0){
a = b;
b = r;
}
}
// 최대공약수로 나눠서 배열안에 넣어주기
return [top/b,bot/b]
}
1. 분자와 분모를 통분해서 구해줍니다.
2. 최대 공약수를 구해줍니다.
3. 최대공약수로 나눠서 배열 안에 넣어줍니다.
👀 다른 사람의 풀이
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];
}
최대 공약수를 구해서 푸신건 저와 같지만 깔끔하게 푸셨길래 가져왔습니다.
0단계라 만만하게 봤는데 쉬운 분수를 코드로 표현하려니 뇌정지가 왔습니다
오랜만에 들어보는 기약분수까지 쉽지않네요..
'Algorithm' 카테고리의 다른 글
프로그래머스 0단계 : 중앙값 구하기 (2) | 2022.12.13 |
---|---|
프로그래머스 0단계 : 배열 두 배 만들기 (2) | 2022.12.13 |
프로그래머스 0단계 : 숫자 비교하기 (1) | 2022.12.11 |
프로그래머스 0단계 : 몫 구하기 (1) | 2022.12.10 |
프로그래머스 1단계 : 폰켓몬 (4) | 2022.12.08 |
댓글