🖥 Computer Science/Algorithm
[프로그래머스/Lv.0] 분수의덧셈
dev_genie
2023. 11. 18. 14:35
⚙️ 문제 설명
⚠️ 제한 사항
🔃 입출력
📜 입출력 예 설명
🧠 나의 풀이
function solution(numer1, denom1, numer2, denom2) {
// 분자
let topNum = numer1*denom2 + numer2*denom1;
// 분모
let botNum = denom1*denom2;
// 최대공약수
let maxiNum = 1;
for (let i = 1; i<=topNum; i++) {
if (topNum%i === 0 && botNum%i === 0) {
maxiNum = i;
}
}
return [topNum/maxiNum, botNum/maxiNum];
}
solution(1,2,3,4);
solution(9,2,1,3);
🧐 풀이 설명
먼저 입출력 예1의 답이 [5,4] 가 되는 이유를 풀이 해봤을 때,
문제에서 첫번째 분수의 분자, 분모가 각각 numer1, denom1 이고, 두번째 분수의 분자, 분모가 각각 numer2, denom2 라고 했으니 이를 예1의 분수로 치환했을 때 1/2 + 3/4 가 된다.
이때 분수의 덧셈을 하기 위해서는 우선 분모를 똑같이 만들어줘야 한다.
그러기 위해 분자*대각선 방향의 상대방 분모 곱해준 값 / 분모끼리 곱해준 값을 구하면 10/8이 나온다.
그리고 이를 기약분수로 나타내라고 했는데, 기약분수는 분자, 분모를 나누었을 때의 값이 1뿐이어서 더 이상 나누어 떨어지지 않는 분수를 말한다.
이때는 10/8을 2의 약수로 나눌 수 있으니 5/4가 된다.
그리고 예1의 답이 [5,4] 라고 했으니 기약분수의 분자, 분모 값을 배열화한 값을 반환해주면 된다.
문제 출처
https://school.programmers.co.kr/learn/courses/30/lessons/120808
LIST