본문 바로가기

TIL

분수의 덧셈

문제

번째 분수의 분자와 분모를 뜻하는 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