class Solution {
public long solution(int a, int b) {
if(a>b) {
int temp = a;
a= b;
b= temp;
}
long answer = 0;
for(int i=a; i<=b; i++) {
answer += i;
}
return answer;
}
}
1~n까지의 합 공식 = n*(n+1)/2 를 썼다가 음수를 처리못해서 틀렸고 결국 그냥 반복문을 사용했는데 혹시 수학적으로 다른 풀이가있을까 살펴봤다.
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a, b), Math.max(a, b));
}
private long sumAtoB(long a, long b) {
return (b - a + 1) * (a + b) / 2;
}
}
a가 b보다 큰 수 일때 처리하는 코드도 훨씬 간단하다.
swap로직대신 메서드를 사용했다.
Math.min()
과 Math.max()
를 기억하자.
a~b사이의 합은 등차수열의 합공식을 이용했다.
n : 항의 수, a : 첫째항, d: 공차