문제 설명
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해 보세요.

입출력 예
| numer1 | denom1 | numer2 | denom2 | result |
| 1 | 2 | 3 | 4 | [5, 4] |
| 9 | 2 | 1 | 3 | [29, 6] |
- 분모끼리 곱한 값을 다음 분모자리에 두고
- 각자의 분자에 상대방의 분모를 곱하여 더하여 다음 분자 자리에 둔다.
- 분자와 분모를 최대 공약수로 나누면 된다.
문제 풀이
코드에서 최대 공약수를 구하는 방법은 분자, 분모 중 작은 숫자를 기준으로 계속 나눠간다.
둘 다 나누어 떨어지면 그 숫자가 최대 공약수다.
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
var num = denom2 *numer1 + denom1 * numer2 // 분자구하기
var denum = denom1*denom2 // 분모구하기
let minNumber;
if(denum < num){
minNumber = denum
} else {
minNumber = num
}
// 나누어 떨어진다는 것은 나머지가 0이라는 것.
// 나머지 연산자는 % 임.
while(true){
if(denum % minNumber === 0){
if(num % minNumber === 0){
//minNumber은 최대 공약수임.
return [num/minNumber, denum/minNumber]
}
}
minNumber = minNumber - 1;
}
}
// 1. 분모덧셈
// 2. 분자분모의 최대공약수로 나눠줌
// 2-1. 분자분모중 작은 수를 찾기
// 2-2. 작은 수를 분자분모로 나눠보기
// 2-2-1. 둘다 나누어 떨어지면 그 나눈 수가 최대 공약수
// 2-2-2. 안 나누어떨어지면 작은 수를 1 줄이고 2-2로 돌아가기

느낀 점
일단 코드로 분수를 푼다는 개념을 아예 몰라 고생을 했다. 그리하여 유튜브강의를 참고하여 하나씩 이해하려 노력했다. 일단 코드 레벨 0 수준이지만,, 나는 갈길이 아직 많이 멀었다고 생각이 들었다.
다시 복습을 해야 하는 문제이고, 다시 풀면서 이해하도록 해야겠다.
🚀 틀린점이 있어 지적할 사항이 있다면, 피드백해주시면 감사하겠습니다. 😊
'알고리즘' 카테고리의 다른 글
| 직각삼각형 출력하기 - (프로그래머스 코딩테스트 입문) (0) | 2023.01.22 |
|---|---|
| 최빈수 구하기 - (프로그래머스 코딩테스트 입문) (1) | 2023.01.17 |
| 문제해결접근법 (0) | 2023.01.14 |
| 객체와 배열의 Big O 표기법 (0) | 2023.01.02 |
| 자바스크립트 알고리즘 - 빅오(Big O)표기법 정리 (1) | 2023.01.01 |