JAVA공부

분수의 덧셈

ideas0123 2024. 11. 16. 23:25

프로그래머스 문제)

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


제한사항)

0 <numer1, denom1, numer2, denom2 < 1,000


  • 첫번째 코드 _ 실패
function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    var numer = 0;
    var denom = 0;
    var num = [2, 3, 5, 7, 11, 13, 17, 19];
    
    if (denom1 === denom2) {
        numer = numer1 + numer2;
        denom = denom1;
        console.log("같은 분모:", numer, denom);
    } else {
        denom = denom1 * denom2;
        numer1 *= denom2;
        numer2 *= denom1;
        numer = numer1 + numer2;
        console.log("다른 분모:", numer, denom);
    }
    
    for (let i = 0; i < num.length; i++) {
        while (numer % num[i] === 0 && denom % num[i] === 0) {
            numer /= num[i];
            denom /= num[i];
        }
    }
    
    answer = [numer, denom];
    console.log("약분 결과:", numer, denom);
    return answer;
}
  • 두번째 코드_실패
function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    var numer = 0;
    var denom = 0;
    
    if(denom1===denom2){//분모가 같을 경우
        numer = numer1+numer2;
        denom=denom1;
        console.log("분모가 같음 : ", numer, denom);
    }else{//분모가 다를 경우
        denom = denom1*denom2;
        numer1*=denom2;
        numer2*=denom1;
        numer = numer1+numer2;
        console.log("분모가 다름 : ", numer, denom);
    }
    //약분
    for (let i = 19; i > 1; i--) {
        while (numer % i === 0 && denom % i === 0) {
            numer /= i;
            denom /= i;
        }
    }
    //값 입력
    answer=[numer, denom];
    console.log("결과 값 : ", numer, denom);
    
    return answer;
}

 

흠...어떻게 해야 완벽하게 통과를 할 수 있을까?

 

  • 세번째 코드_성공
function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    var numer = 0;
    var denom = 0;
    
    if(denom1===denom2){//분모가 같을 경우
        numer = numer1+numer2;
        denom=denom1;
        console.log("분모가 같음 : ", numer, denom);
    }else{//분모가 다를 경우
        denom = denom1*denom2;
        numer1*=denom2;
        numer2*=denom1;
        numer = numer1+numer2;
        console.log("분모가 다름 : ", numer, denom);
    }
    //약분
    for (let i = 1000; i > 1; i--) {
        while (numer % i === 0 && denom % i === 0) {
            numer /= i;
            denom /= i;
        }
    }
    //값 입력
    answer=[numer, denom];
    console.log("결과 값 : ", numer, denom);
    
    return answer;
}

※ 제한된 숫자가 1000까지라고 되어있어서 1000부터 약분을 할 경우 성공이 된다!!

'JAVA공부' 카테고리의 다른 글

공원 산책  (0) 2024.11.18
달리기 경주_JAVA_시간의 복잡도_일부 성공  (0) 2024.11.17
링크 유효성 검사  (2) 2024.11.15
양꼬치_Math.floor / Math.trunc()  (0) 2024.11.14
JavaScript에서 swap  (1) 2024.11.13