문제
https://school.programmers.co.kr/learn/courses/30/lessons/120808
📝풀이
- 분모를 서로 곱해 통분하고, 각 분자에는 상대방의 분모를 곱해 통분한 다음 더해준다.
- 기약분수가 되려면 분모와 분자를 두 수의 최대공약수(GCD)로 나눠줘야 한다. (GCD - Greatest Common Divisor)
- 최대공약수의 범위는 1에서부터 최대 Math.min(분모, 분자)까지 될 수 있다. 따라서 for문을 돌며 분모와 분자를 나눠 나누어 떨어지게 하는 수를 gcd에 저장하고, for문이 종료될 때 나오는 최종 gcd로 분모와 분자를 나눈 결과를 반환하면 된다.
💻코드
function solution(numer1, denom1, numer2, denom2) {
let numer = numer1 * denom2 + numer2 * denom1;
let denom = denom1 * denom2;
let gcd = 1;
for(let i = 1; i <= Math.min(numer, denom); i++) {
if(numer % i === 0 && denom % i === 0) gcd = i;
}
return [numer / gcd, denom / gcd];
}
'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv.0 | 구슬을 나누는 경우의 수 (0) | 2023.07.07 |
---|---|
프로그래머스 Lv.0 - 직각삼각형 출력하기 +) nodejs readline (0) | 2023.07.06 |
프로그래머스 Lv.0 | 최빈값 구하기 (0) | 2023.07.05 |
프로그래머스 Lv.0 | 자릿수 더하기 (0) | 2023.06.30 |
프로그래머스 Lv.0 | 캐릭터의 좌표 (0) | 2023.06.29 |