Java 반복문 누적 계산은 매번 나온 값을 한 변수에 더하거나 곱하는 문제다. 부호가 번갈아 바뀌는 합, 두 수가 반대 방향으로 움직이는 곱의 합, 증가 폭이 커지는 수열, 팩토리얼을 비교하면 초기값과 갱신식이 왜 중요한지 보인다.
세 줄로 설계: 누적값의 초기값 → 이번 반복에서 만들 값 → 다음 반복을 위한 상태 갱신.

덧셈 누적과 곱셈 누적, 증가 폭이 달라지는 수열을 한눈에 비교
1. 누적 연산에 맞는 항등값을 고른다
| 연산 | 초기값 | 이유 |
|---|---|---|
| 합 | 0 |
어떤 수에 0을 더해도 값이 유지된다. |
| 곱 | 1 |
어떤 수에 1을 곱해도 값이 유지된다. |
| 최솟값 | 첫 원소 또는 큰 값 | 실제 값과 비교하며 줄여 간다. |
팩토리얼을 0에서 시작하면 첫 곱셈부터 결과가 모두 0이 된다. 반대로 합을 1에서 시작하면 실제 답보다 1이 커진다.
2. 1-2+3-4+…+99-100 계산
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += (i % 2 == 1) ? i : -i;
}
System.out.println(sum); // -50
원문 3은 홀수는 더하고 짝수는 빼는 규칙이다. sum = sum - i와 sum += -i는 같은 뜻이지만, 부호가 바뀌는 항을 만든다고 생각하면 후자가 식과 더 닮았다.
3. 두 값이 반대 방향으로 움직이는 곱의 합
long sum = 0;
for (int right = 1; right <= 77; right++) {
int left = 78 - right;
sum += (long) left * right;
}
원문 6의 77×1 + 76×2 + … + 1×77은 한쪽은 감소하고 다른 쪽은 증가한다. 변수를 두 개 갱신해도 되지만 left + right = 78 관계를 식으로 만들면 상태가 하나 줄어든다.
4. 1, 2, 4, 7, 11 수열
int value = 1;
for (int i = 1; i <= n; i++) {
System.out.print(value + " ");
value += i;
}
원문 15의 항 사이 차이는 1, 2, 3, 4처럼 증가한다. 현재 항을 먼저 출력한 뒤 value += i로 다음 항을 만든다. 출력과 갱신 순서가 바뀌면 첫 항부터 2가 나온다.
5. N!은 1부터 곱한다
static long factorial(int n) {
if (n < 0) {
throw new IllegalArgumentException("n은 0 이상이어야 합니다.");
}
long result = 1;
for (int i = 2; i <= n; i++) {
result *= i;
}
return result;
}
0! = 1이므로 0도 처리한다. long은 20!까지 안전하고 21!부터 범위를 넘는다. 더 큰 값은 BigInteger를 사용해야 한다.
6. 실수하기 쉬운 부분
출력과 갱신 순서를 바꾼다
수열은 현재 값을 출력한 뒤 다음 값을 계산하는지 표로 한 번 추적한다.
int 범위를 넘긴다
곱셈은 대입 전에 이미 int로 계산될 수 있다. 피연산자 하나를 long으로 바꾼다.
반복 경계를 한 칸 틀린다
1부터 N까지면 i <= n, N개 반복이면 보통 i < n이다.
- 합은 0, 곱은 1에서 시작한다.
- 현재 항과 다음 항을 만드는 갱신식을 분리한다.
- 관계식으로 상태 변수 수를 줄일 수 있다.
- 팩토리얼은 오버플로 범위를 확인한다.
'자격증·공부 아카이브 > Java 기초' 카테고리의 다른 글
| Java 문자열 집계 문제: 알파벳 빈도·OX 점수·숫자 대시 개수 (0) | 2026.08.03 |
|---|---|
| Java 숫자 계산 예제: 거스름돈·반올림·구구단·세 자리 곱셈 (0) | 2026.08.02 |
| Java 반복문 누적 계산: 교대 합·수열·팩토리얼 풀이 (0) | 2026.08.01 |
| Java 자릿수와 진법 변환: 숫자 합·10진수·2진수 원리 (0) | 2026.07.30 |
| Java 배열 문제 풀이: 조건 필터링·배수·정렬·가장 가까운 두 수 (0) | 2026.07.30 |