문제
첫 번째 분수의 분자와 분모를 뜻하는 numer1, denom1, 두 번째 분수의 분자와 분모를 뜻하는 numer2, denom2가 매개변수로 주어집니다. 두 분수를 더한 값을 기약 분수로 나타냈을 때 분자와 분모를 순서대로 담은 배열을 return 하도록 solution 함수를 완성해보세요.
제한사항
0 <numer1, denom1, numer2, denom2 < 1,000
입출력 예
numer1 | denom1 | numer2 | denom2 | 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 합니다.
■ 문제 이해하기
■ 코드로 작성
// 1. 분모덧셈
// 2. 분자분모의 최대공약수로 나누기
function solution(numer1, denom1, numer2, denom2) {
var answer = [];
const denom = denom1 * denom2 //분모
const num = numer1 * denom2 + numer2 * denom1 //분자
// 2-1. 분자분모중 작은 수를 찾기
let minNumber; // minNumber 에는 작은 수가 들어가 있음.
if(num < denom) {
minNumber = num;
} else {
minNumber = denom;
}
// 2-2. 작은수를 분자분모로 나눠보기
// 2-2-1. 나누어 떨어지는 것(나머지가 0) -> 그 나눈 수가 최대공약수
// while 으로 나누어 떨어질 때까지 반복
while(true) {
if(num % minNumber === 0 && denom % minNumber === 0) {
return [num / minNumber, denom / minNumber]; //찾은 최대공약수로 분자 분모 나누기
}
// 2-2-2. 안 나누어떨어지면 작은 수를 1 줄이고 2-2로 돌아가기
minNumber = minNumber - 1;
}
}
🤔 느낀점
프로그래머스에 입문에 있는 문제이지만, 문제 자체를 이해하기 부터 어려웠다. 유튜브 라매개발자님의 풀이를 보면서 손으로 직접 써보고 코드도 순서대로 주석을 달아가며 작성하니 쉽게 이해할 수 있었고 머릿속에 정리가 되는 느낌이 들었다. (어릴때 배웠던 최대공약수 구하는 방법이 손으로 써보니까 기억이 났다..)
앞으로도 어려울 때마다 손으로 써보거나 주석을 달아 순서를 작성해보면서 코드를 작성하도록 연습하자.
'TIL' 카테고리의 다른 글
localStorage (0) | 2024.08.07 |
---|---|
팀 프로젝트 - 영화 검색 페이지 빌드업 (240731~240807) (0) | 2024.08.06 |
얕은복사, 깊은복사, 구조분해할당 (0) | 2024.08.04 |
Promise / async & await (0) | 2024.08.02 |
쿼리스트링과 URLSearchParams (0) | 2024.08.01 |