두 정수 사이의 합 (Level1)
문제 설명
두 정수 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의 대소관계는 정해져있지 않습니다.
입출력 예
작성코드
class Solution {
public long solution(int a, int b) {
long answer = 0;
if ( a > b ) {
for(int i = b; i < a + 1; i++) {
answer += i;
}
return answer;
} else if ( a < b) {
for(int i = a; i < b + 1; i++) {
answer += i;
}
return answer;
} else {
return a;
}
}
}
코드설명
문제를 보자마자 아 아래와 같은 경우의 수를 가지고 구하면 되겠구나 했다.
① a가 b보다 큰경우
② b가 a보다 큰경우
③ a와 b가 같은 경우
우선 ①a가 b보다 큰 경우, b값부터 a값까지 돌면서 answer에 값을 더해준다. 여기서 a+1로 표기한건 부등호를 <로 써서 위와 같이 쓰게 되었다. 물론 <=로 사용하면 a만 쓰면 된다.
그리고 ②b가 a보다 큰 경우, 위와 반대로 a값 부터 b값까지 answer에 하나씩 더해준다. 그리고 ③a와 b값이 같은 경우는 둘 중 하나의 값만 리턴해주면 된다.
다른 사람의 풀이
class Solution {
public long solution(int a, int b) {
return sumAtoB(Math.min(a, b), Math.max(b, a));
}
private long sumAtoB(long a, long b) {
return (b - a + 1) * (a + b) / 2;
}
}
허허허.. 이렇게 내 코드는 너무 더러운 코드였다.. 이렇게 사용도 가능하구나.. 그리고 Math.max와 Math.min 함수를 사용해서 푸는 방법도 있었다.