KDT 실무형 스프링 백엔드 엔지니어 양성과정 6기 | Algorithm CODEKATA
➕ 두 정수 사이의 합
🏷 관련 주제 : Loop
Math
문제 설명
두 정수 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 |
✔ Solution with Loop
class Solution {
public long solution(int a, int b) {
long answer = 0;
for (int n = Math.min(a, b); n <= Math.max(a, b); n++) {
answer += n;
}
return answer;
}
}
채점 결과

✔ Solution with 등차수열의 합 공식
class Solution {
public long solution(int a, int b) {
int n = (b > a) ? b - a : a - b;
long answer = (long) (a + b) * (n + 1) / 2;
return answer;
}
}
채점 결과

💥 오늘 만난 문제 & 나의 시도 💦 & 해결 방법 👍
📌 오늘 만난 문제 : 매개변수로 두 정수 a
, b
가 주어질 때, a
와 b
사이에 속한 모든 정수의 합을 반환하시오.
1. 등차수열의 합 공식을 이용하기
1
부터 n
까지의 연속하는 n
개의 자연수의 합은
$1 + 2 + 3 + 4 + \cdots + (n - 2) + (n - 1) + n$
$= \left\{1 + n\right\} + \left\{2 + (n - 1)\right\} +\left\{3 + (n - 2)\right\} + \cdots$
$= (n + 1) + (n + 1) + (n + 1) + \cdots$
$= \frac{n \cdot (n + 1)}{2}$
이 공식을 응용하여 a
부터 b
까지 연속하는 자연수의 합을 구하면(단, a ≤ b라고 하자.)
아래의 식은 a
부터 b
까지 연속한 자연수의 합이라는 의미로 (a + 1)
, (b - 1)
이 들어가 있는데a
와 b
의 값에 따라 (a + 1)
또는 (b - 1)
이 존재하지 않을 수도 있다.
$a + (a + 1) + \cdots + (b - 1) + b$
$\require{cancel}= \color{green} {\left\{\cancel{1} + \cancel{2} + \cancel{3} + \cdots + \cancel{(a - 1)} + a + \cdots + (b - 1) + b\right\}}$
$\require{cancel}\color{orange} {\quad - \left\{\cancel{1} + \cancel{2} + \cancel{3} + \cdots + \cancel{(a - 1)}\right\}}$
$= \color{green} {\frac{b \cdot (b + 1)}{2}} - \color{orange} {\frac{(a - 1) \cdot \left\{(a - 1) + 1\right\}}{2}}$
$= \color{green} {\frac{b \cdot (b + 1)}{2}} - \color{orange} {\frac{(a - 1) \cdot a}{2}}$
$= \frac{b \cdot(b + 1) - a \cdot (a - 1)}{2}$
$= \frac{(b^{2} + b) - (a^{2} - a)}{2}$
$= \frac{b^{2} + b - a^{2} + a}{2}$
$= \frac{(b^{2} - a^{2}) + (b - a)}{2}$
$= \frac{(b + a)\cdot(b - a)}{2}$
즉, a
부터 b
까지의 합은 (a <= b
일 때,) (b - a) * (b + a) / 2
로 구할 수 있다.
위의 공식을 활용하여 a
부터 b
까지의 자연수의 합을 구해보자.
매개변수로 받은 a
, b
는 대소관계가 명확하지 않으므로
1) 삼항연산자를 이용하여 큰 수에서 작은 수를 뺀 값을 int n
에 할당하자.
int n = (b > a) ? b - a : a - b;
2) 등차수열의 합 공식을 활용하여 a
부터 b
까지의 자연수의 합을 long answer
에 할당하자.
long answer = (long) (a + b) * (n + 1) / 2;
3) answer
에 할당된 값을 반환하자.
return answer;
2. 반복문을 이용하기
반복문을 돌리는 변수의 초기값을 a
와 b
중 작은 자연수, 조건을 a
와 b
중 큰 자연수 이하로 주고 변수의 값을 1
씩 증가시키며 반복문을 돌면서 자연수들을 더해 문제를 해결해 보자.
1) 반환할 값을 할당할 변수 long answer
초기화
long answer = 0;
2) 반복문을 돌면서 a
와 b
사이의 자연수를 answer
에 더해주자.
반복문의 변수의 초기값은
a
와b
중 작은 값으로 주기위해Math.min(a, b)
를 이용
반복문의 조건은a
와b
중 큰 값 이하가 되어야 하므로Math.max(a, b)
를 이용
for (int n = Math.min(a, b); n <= Math.max(a, b); n++) {
answer += n;
}
3) answer
에 할당된 값 반환
return answer;
💬 무엇을 새롭게 알았는지
수학 공식을 이용해 문제를 풀어보았다.
반복문을 돌리는 변수의 초기값을 0
이 아닌 정수로 주고 반복문을 돌려 보았다.