티스토리 뷰
📌문제
📌나의 코드
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
//공통 분모
let denom = denom1 * denom2;
//분자 합
let numer = (numer1 * denom2) + (numer2 * denom1);
//2.분자분모의 최대공약수로 나누기
//최대공약수GCD : 두 수 중에 작은 값과 같거나 작은 수가 됨.
//예를들어... 10와20의 최대공약수는 10, 24와18은 6
//14와 21이 있으면 먼저 작은 수인 14로 나눠본다. 그 다음 14이하의 숫자로 차례로 나눠본다.
let gcd = 0;
//최대공약수 범위 설정 : Math.min(denom, number); 분자값, 분모값 중에 작은 수까지
//i는 범위보다 작거나 같아야 함. 자연수에서 구하기 때문에 i는 1부터 시작.
for(let i = 1; i < Math.min(denom, numer); i++ ){
//최소값으로 들어오는 변수를 1,2...i로 나눈 값의 나머지가 0일 때
if( denom % i === 0 && numer % i === 0 ){
gcd = i;
}
}
let a = denom / gcd ;
let b = numer / gcd ;
answer = [b, a]
return answer;
}
코드 실행 테스트 결과
테스트 1
입력값 〉 1, 2, 3, 4
기댓값 〉 [5, 4]
실행 결과 〉 테스트를 통과하였습니다.
테스트 2
입력값 〉 9, 2, 1, 3
기댓값 〉 [29, 6]
실행 결과 〉 테스트를 통과하였습니다.
제출 결과
채점 결과
정확성: 66.7
합계: 66.7 / 100.0
✏️ 어려웠던 점
- 최대 공약수와 기약 분수 만들기
먼저 기약 분수가 뭐였는지 떠오르지 않아서 당황했지만 문제를 풀기 전에 기약 분수 만드는 방법부터 이해하고 풀기 시작..!
//공통 분모
let denom = denom1 * denom2;
//분자 합
let numer = numer1 * denom2 + numer1 * denom2;
분수의 합을 구하는 것까지는 수월했다.
문제는 여기서 기약분수를 만들려면 최대공약수를 알아야한다는 것이다. 최대공약수를 구하는 방법을 다시 숙지하고 다시 문제를 풀어보려고 했다.
몇가지 시도를 해봤는데
- 첫번째 시도는 분모분자중에 작은 수을 구해서 작은 수로 분모분자를 나눈 나머지가 0인 값을 구하기 위한 반복문을 돌려서 최대공약수 값을 구했다. 그렇게 구한 최대공약수로 다시 분모 분자를 각각 나눠서 배열에 담았다. 테스트 코드 실행은 성공이지만 최종 제출 결과는 실패가 섞여있어서 실패다.
- 두번째 시도 마찬가지로 분모분자 두 수 중에 작은 수를 minNum변수에 담았다. while문안에 작은 수인 분모(또는분자) 값을 minNum로 나눈 나머지가 0일 때, 분자를 minNum로 나눈 나머지값이 0일 경우에는 각 분모분자를 또 minNum로 나눈 값을 배열에 담았다. 나누어 떨어지지 않을 경우엔 작은수를 1 줄이고, 다시 작은 수로 나누기를 반복했다. 결과는 무한 로딩으로 실패했다.( 두번째 방법은 유튜브 강의를 참고했다.https://www.youtube.com/watch?v=uJ4E_1pvI9c)
3. 유클리도 호제법을 사용한 다른 사람의 코드를 참고해 풀기 성공..
📌다른 사람 풀이
function solution(numer1, denom1, numer2, denom2) {
//var answer = [];
//분자 합
let numer = numer1 * denom2 + numer2 * denom1;
//공통 분모
let denom = denom1 * denom2;
//최대 공약수 구하기
let gcd = cal_gcd(numer, denom);
return [numer / gcd, denom/gcd] //기약분수 만들기
}
// 최대 공약수 구하기
function cal_gcd(a, b) {
return a % b === 0 ? b : cal_gcd(b, a % b)
}
'프로그래머스' 카테고리의 다른 글
[프로그래머스|JS] Lv.0 구슬을 나누는 경우의 수 (0) | 2024.10.17 |
---|---|
[프로그래머스|JS] Lv.0 짝수 홀수 개수 (0) | 2024.10.16 |
[프로그래머스|JS] Lv.1 K번째수 (0) | 2024.10.14 |
[프로그래머스|Java] Lv.0 배열만들기1 (0) | 2024.10.14 |
[프로그래머스/JS] Lv.0 배열의 평균값 (0) | 2024.09.25 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- create react app
- 프로그래머스
- 재귀함수
- overloading
- props
- splice
- useEffect
- ReactJS
- React
- NPM
- 챌린지1일차
- useState
- 리액트
- TypeScript
- 노마드
- CLI
- 타입스크립트
- 티스토리챌린지
- ts
- 카카오로그인
- 리액트네이티브
- nomard
- 프로젝트회고록
- 오블완
- 오버로딩
- await
- 자바스크립트
- Async
- Cleanup
- slice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함