두 정수 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 | return |
---|---|---|
3 | 5 | 12 |
3 | 3 | 3 |
5 | 3 | 12 |
a, b 두 정수 사이에 속한 모든 정수의 합을 구하면 되는 문제이다. 여기서 a, b가 같을 경우는 둘 중 아무 값을 반환한다.
function solution(a, b) {
var answer = 0;
let num = [];
if (a === b) {
answer = a;
} else {
num.push(a,b);
num.sort((a,b)=>a-b); // 오름차순 정렬
for (let i=num[0]; i<num[1]+1; i++) {
answer += i
}
}
return answer;
}
num=[]
이 문제는 생각할 필요도 없이 간단하게 풀 수 있는 문제였다.
하지만, 다른 사람의 풀이를 찾다가 대단한 것을 발견했다!
return (a+b)*(Math.abs(b-a)+1)/2;
나는 a < b의 경우, a부터 b까지 하나씩 더하여 푸는 방법을 생각했다. (아주 간단)
그러나 이 문제에도 공식이 존재했다!
a < b 일 때,
(a+b)*(b - a - 1)/2 = a부터 b의 합
또, 나는 a > b의 경우를 오름차순 정렬로 해결했는데 Math.abs()메서드를 사용하여 풀어나가는 방법도 있었다.
Math.abs(): 주어진 숫자의 절대값을 반환한다. x가 양수이거나 0이라면 x를 반환하고, x가 음수라면 x의 반대값, 즉 양수를 반환한다.더 알아보기
정말 대단했다. 숫자의 범위가 커질수록 for문을 하나씩 돌리는 것보다 공식으로 풀어내는 것이 훨씬 효율적이기 때문이다. 또, 그 많은 수들을 오름차순 정렬을 하지 않고 음수의 값을 절대값으로 바꾼다니? 이런 것이 좋은 코드라고 할 수 있지 않을까? 실제로 이 코드를 보고 나뿐만 아니라 많은 사람들이 감탄했다!