
두 정수 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의 대소관계는 정해져있지 않습니다.
function solution(a, b) {
var answer = 0;
if(a<=b){
for(let i = a ; i <=b ; i++ ){
answer += i;
}
}
if(a>b){
for(let i = b; i <=a ; i++){
answer += i;
}
}
return answer;
}
대소 관계가 정해져 있지 않으니 조건문으로 아래와 같이 나눠야 한다.
a가 b보다 작거나 같을 때 -> 1씩 더해주기
a가 b보다 클 때 -> 1씩 더해주기
조건문에 따라 반복된 값들(a와 b 사이의 값들)을 모두 더해 return하는 방식이다
이 문제의 다른 풀이들을 봤는데
아주 간결하게 해결하신 분들이 많았다.
🍒 참고하면 좋을 자료 🍒
📘 좀 더 간결한 풀이 (클릭)
📘 등차수열의 합 공식 이용 + 최댓값, 최솟값 이용 (클릭)
📘 등차수열의 합 공식 자세한 설명 (클릭)
function solution(a, b) {
return ((a+b) * (Math.abs(b-a) + 1)) / 2;
}
2S = (1+10) + (2+9) + (3+8) + ... + (8+3) + (9+2) + (10+1)
2S = 11 + 11 + ... + 11 + 11
2S = 11 * 10
S = 55
1부터 10을 더하는데 헷갈리니까 그냥 대칭으로 다 더하고 2로 나누면
1부터 10까지 합 더 쉽게 구할 수 있지않니?
(지금은 1에서 10이어도 나중에 1에서 100이라면?!)
이런느낌으로,,, 푸는 건데 얼마나 많은 효율적인 공식들을 아느냐에 따라서
코드의 줄이 아주 짧아질 수고, 길어질 수도 있다는 것에 자괴감(?) 이라 해야하나
암튼 개발자의 세계란,, 멀고도 험난한 것 같다는 것을 다시 한번 느끼는 순간이었다...!!!!!
알고리즘 공부 더더더 많이 해야겠다 휴,,