Programmers/Level 1

[Javascript] 프로그래머스 : 두 정수 사이의 합

emayom 2021. 7. 6. 15:16

[Javascript] 프로그래머스 Level1 _ 두 정수 사이의 합

 

👇🏻

Link_Click

 

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)


1.

단순히 정수 a와 b 중 더 작은 것부터 더 큰 것 까지를 더할 수 있도록 

두 수를 배열에 담아 오름차순으로 정렬한 후 반복문으로 더해주었다!

function solution(a, b) {
    var answer = 0;
    
    //배열로 둘 중 큰 수 확인
    var arr = [a, b];
    arr.sort((a,b)=>a-b);
    
    for(let i = arr[0]; i<= arr[1]; i++){
        answer+=i;
    }

    return answer;
}

2.

두번째는 배열 대신 Math.min() 과 Math.max()를 통해 두 수 중 큰 수를 알아냈다.

function solution(a, b) {
    var answer = 0;
    
    for(let i = Math.min(a,b); i<= Math.max(a,b); i++)    
        answer+=i;
 
    return answer;
}

3.

다른 분들의 풀이를 보던 중 공식을 이용해서 풀이한 것이 있었다.

그래서 공식을 이용한 조금은 다른 방법으로 풀어봤다.

 

1부터 n까지의 수를 더하는 공식 => (n+1)*n/2를 함수로 정의해서 활용했다.

실제로 반복하면서  합을 구하는게 아니라

두 수의 차가 클 수록 이 방법이 위의 방법보다 연산 횟수는 더 적을 것 같다!

function solution(a, b) {
    var min = Math.min(a,b);
    var max = Math.max(a,b);
    
    function sum(num){
        return (1+num)*num/2;
    }
    
    return sum(max) - sum(min) + min;
}

4.

처음에는 1부터 10까지의 합을 더할 때 11*5와 같이 구하는 것 처럼 풀이하고 싶었다. 

근데 손으로 수들을 적어가며 짝을 짓다보니

a부터 b까지의 수의 개수가 홀수가 되어버리면 가운데 수를 어떻게 알고 더해야해야지싶어서 말았다ㅎㅎㅎㅎㅎ

 

그러다 생각해보니 1부터 11까지의 합을 구할 때는 1부터 10까지의 합 + 11 => 11*5 + 11 과 동일하길래 

아래처럼 풀이했다! 음수 ~ 양수는 테스트할 생각을 못했었는데 Math.abs()를 사용하지 않아도 결과가 잘 나왔다.

function solution(a, b) {
    var min = Math.min(a,b);
    var max = Math.max(a,b);
    
    if(min != max)
        return (min + max-1) * (max-min)/2 + max;
    else 
        return a;
}

5.

아래 코드가 3번에서 언급한 다른 분의 풀이이다.

a+b (양 끝의 합)에 (Math.abs(a-b)+1)/2 (합의 개수)를 곱했다!

사실 왜 합의 개수가 저렇게 되는지는 100% 이해하진 못했지만

이렇게 한 줄로도 정확한 답을 계산할 수 있다는게 참 신기했다...!

function solution(a, b) {
    //양 끝의 합 * 합의 개수
    //return (a+b)*(Math.abs(a-b)+1)/2;
    return (a+b)*(Math.abs(b-a)+1)/2;
}

⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도입니다. 참고해주시고 편안하게 봐주세요 :)  ⚠️

***    혹시라도 잘못된 정보가 있다면  언제든지 알려주시면 감사하겠습니다  !    ***