★ 문제
두 정수 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;
}
'스파르타 (React_6기) 본캠프' 카테고리의 다른 글
2024. 08. 21. (알고리즘 - 서울에서 김서방찾기) (0) | 2024.08.21 |
---|---|
2024. 08. 20. (알고리즘 - 콜라츠 추측) (0) | 2024.08.21 |
2024. 08. 16. (알고리즘 - 하샤드 수) (0) | 2024.08.16 |
2024. 08. 14. (알고리즘 - 정수 내림차순으로 배치하기) (0) | 2024.08.14 |
2024. 08. 13. (알고리즘 - 정수 제곱근 판별) (0) | 2024.08.13 |