본문 바로가기
자바스크립트

[javascript] 최소공배수, 약분 -분수의 덧셈(프로그래머스)

by 슈크림 붕어빵 2023. 7. 6.

분수의 덧셈은 어떻게 할까? 분모와 분자를 나눠서 생각해야하나? 하면서 미뤄왔던 문제였다.

처음은 내 생각만으로 풀고자하여 관련 내장함수 없이 풀어보았다.

 

로직은 아래와 같다.

1. 분자의 최소공배수 구하기

2. 최소공배수를 이용해 분수 더하기

3. 약분하기

function solution(numer1, denom1, numer2, denom2) {
    answer = []
    let lcm = 1;
    while(true){
      if((lcm % denom1 == 0) && (lcm % denom2 == 0)){
        var numer3 = lcm/denom1*numer1+ lcm/denom2*numer2;
        var denom3 = lcm;
        for (var k = Math.min(numer3,denom3); k>1;k--){ //약분
                    if(numer3%k==0&&denom3%k==0){
                        numer3=numer3/k;
                        denom3=denom3/k;
                    }
                }
          answer.push(numer3);
          answer.push(denom3);
          break;
      }
      lcm++;
    }
  	return answer; 
}

 

function solution(numer1, denom1, numer2, denom2) {
    var answer = [];
    for (var i = 1; i<=denom1;i++){ //denom2와 곱해지는 경우
        for (var j=1;j<=denom2;j++){ //denom1과 곱해지는 경우
            if(denom1*j==denom2*i){//최소공배수 구하기
                var numer3 = numer1*j+numer2*i;
                var denom3 = denom1*j;
                for (var k = Math.min(numer3,denom3); k>1;k--){ //약분
                    if(numer3%k==0&&denom3%k==0){
                        numer3=numer3/k;
                        denom3=denom3/k;
                    }
                }
                answer.push(numer3);
                answer.push(denom3);
                return answer;
            }
        }
    }
    
}

두가지 방법으로 풀어보았는데 처음 방법이 좀 더 나은 것 같다!

 

 

자바 스크립트 함수를 모르고 그냥 풀기에는 프로그래머스 2일차 치고는 생각을 꽤 해야하는 문제인 것 같다. 다른 언어를 배웠다면 생각하기 어렵지 않겠지만 언어가 처음인 사람은 어려울 것 같다.