두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.
a | b | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
const solution = (a, b) => {
if(a === b) return a;
let result = 0;
if(a - b < 0) {
for(let i = a; i <= b; i += 1) {
result += i;
}
}
if(a - b > 0) {
for(let i = a; i >= b; i -= 1) {
result += i;
}
}
return result;
}
/*
내가 처음 작성한 코드이다. 생각의 흐름대로 작성하다보니 처음 코드는 별로인거같다..
1. 처음 if문에서 a와 b가 같은 경우 a를 반환하며 함수를 종료시킨다.
2. a가 b보다 작은 경우, 즉 a에서 b까지의 모든 정수를 더해야 하는 경우에는
a에서 b까지 1씩 증가시키면서 모든 정수를 더한다. 이 때 result 변수에 더한 값을 저장한다.
3. a가 b보다 큰 경우, 즉 a에서 b까지의 모든 정수를 더해야 하는 경우에는
a에서 b까지 1씩 감소시키면서 모든 정수를 더한다. 이 때도 result 변수에 더한 값을 저장한다.
4. result를 반환한다.
*/
const solution = (a, b) => {
let result = 0;
for(let i = Math.min(a, b); i <= Math.max(a,b); i += 1) {
result += i;
}
return result;
}
/*
SOLUTION1의 코드를 조금 더 리팩토링하여 간단하게 작성해보았다.
1. result라는 변수를 0으로 초기화한다. 나중에 a와 b 사이의 모든 정수를 더한 결과를 저장하는 데 사용된다.
2. for 반복문을 사용하여 a와 b 사이의 모든 정수를 순회한다.
3. Math.min(a, b)는 a와 b 중에서 더 작은 숫자를, Math.max(a, b)는 더 큰 숫자를 반환한다.
4. 따라서 이 반복문은 a와 b 중에서 더 작은 숫자부터 더 큰 숫자까지 모든 정수를 순회한다.
5. 반복문 내에서는 각 숫자 i를 result에 더한다.
6. result를 반환한다.
*/
const solution = (a, b) => (a + b) * (Math.abs(a - b) + 1) / 2
/*
등차수열의 합을 이용하여 작성한 코드이다.
등차수열은 연속하는 두 항의 차이가 일정한 수열을 말한다.
a, b 두 값을 곱한 후에 2로 나누는 것은 등차수열의 합을 구하는 공식이다.
즉 (첫 번째 숫자 + 마지막 숫자) * 숫자의 개수 / 2를 적용한 것이다.
이렇게 계산하면 a와 b 사이의 모든 정수를 더한 결과를 얻을 수 있다.
*/