스파르타 (React_6기) 본캠프

2024. 08. 19. (알고리즘 - 두 정수의 합)

cha123hein 2024. 8. 20. 07:35

★ 문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

(a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.

a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.

a와 b의 대소관계는 정해져있지 않습니다.)

★ 문제 해결 과정

처음에는 a와 b의 대소관계가 정해져있다는 이야기를 놓쳐 평소처럼 for문을 사용해 a부터 b까지의 합을 구해냈다.

function solution(a, b) {
    var answer = 0;
    for (var i = a; i <= b; i++) {
        answer += i;
    }
    return answer;
}

그러자  a<b인 경우에는 문제 해결이 되지않아 if, else if문을 사용하여

1. a>b 인 경우

2. a=b 인 경우

3. a<b 인 경우

3가지로 나누어서 문제를 해결하려 했으나 그러면 식이 너무 길어질 것 같아

a와 b를 넣었을 때 큰 수와 작은 수를 구별해 낼 수 있는 Math. min, Math. max를 사용하여 큰 수와 작은수를 구별 후 위의 식에 대입하니 해결이 되었다.

 

다른 사람들의 풀이를 보니 가우스 공식을 사용하여

<가우스 공식>
처음 숫자와, 마지막 숫자를 더한 합 = ( a + b )
더할 숫자의 개수 총합의 1/2 = ( b - a + 1) * 1/2
이므로, a에서 b까지의 합은
 ( a + b ) *  ( b - a + 1) * 1/2 
function adder(a, b){
    var result = 0
    return (a+b) * (Math.abs(a-b)+1) / 2;
}

이렇게 한 줄로 간단하게 표현하기도 하였다.

★ 제출한 문제 답안

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