계발하는 개발자

[프로그래머스/Lv.0] 분수의덧셈 본문

🖥 Computer Science/Algorithm

[프로그래머스/Lv.0] 분수의덧셈

dev_genie 2023. 11. 18. 14:35

⚙️ 문제 설명


⚠️ 제한 사항


🔃 입출력 


📜 입출력 예 설명


🧠 나의 풀이

function solution(numer1, denom1, numer2, denom2) {
    // 분자     
    let topNum = numer1*denom2 + numer2*denom1;
    // 분모      
    let botNum = denom1*denom2;
    // 최대공약수
    let maxiNum = 1;
    
    for (let i = 1; i<=topNum; i++) {
        if (topNum%i === 0 && botNum%i === 0) {
            maxiNum = i;
        }
    }
     return [topNum/maxiNum, botNum/maxiNum];
}

solution(1,2,3,4);
solution(9,2,1,3);

 

🧐 풀이 설명

먼저 입출력 예1의 답이 [5,4] 가 되는 이유를 풀이 해봤을 때,

문제에서 첫번째 분수의 분자, 분모가 각각 numer1, denom1 이고, 두번째 분수의 분자, 분모가 각각 numer2, denom2 라고 했으니 이를 예1의 분수로 치환했을 때 1/2 + 3/4 가 된다.

이때 분수의 덧셈을 하기 위해서는 우선 분모를 똑같이 만들어줘야 한다.

그러기 위해 분자*대각선 방향의 상대방 분모 곱해준 값 / 분모끼리 곱해준 값을 구하면 10/8이 나온다.

그리고 이를 기약분수로 나타내라고 했는데, 기약분수는 분자, 분모를 나누었을 때의 값이 1뿐이어서 더 이상 나누어 떨어지지 않는 분수를 말한다. 

이때는 10/8을 2의 약수로 나눌 수 있으니 5/4가 된다.

 

그리고 예1의 답이 [5,4] 라고 했으니 기약분수의 분자, 분모 값을 배열화한 값을 반환해주면 된다.

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/120808

LIST
profile

dev_genie

@dev_genie

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!