본문 바로가기
자격증·공부 아카이브/Java 기초

Java 반복문 누적 계산: 교대 합·수열·팩토리얼 풀이

by 쑥쑥자라나라 2026. 8. 1.
728x90

Java while문 문제는 반복 횟수보다 현재 상태와 종료 조건을 먼저 정해야 풀린다. 목표 몸무게에 도달할 때까지 입력받기, 오답이 5번 쌓일 때까지 덧셈 문제 내기, 두 입력이 모두 0일 때 종료하기를 한 흐름으로 연결해 보자.

while문 설계 순서: 반복 전에 상태를 만든다 → 조건을 검사한다 → 한 번의 입력과 처리를 수행한다 → 상태를 반드시 갱신한다.

목표 달성, 오답 횟수, 종료 신호처럼 상태가 바뀌며 while문이 끝나는 세 가지 장면

1. 반복 조건은 ‘계속할 때’를 쓴다

문제 상태 계속 조건 갱신
목표 감량 현재 몸무게 현재 > 목표 감량값 빼기
덧셈 게임 오답 횟수 오답 < 5 틀렸을 때 1 증가
종료 신호 두 입력값 무한 반복 0, 0이면 break

while (true)가 틀린 것은 아니다. 종료 신호가 반복문 안에서 결정되는 문제라면 무한 반복을 만들고 break 위치를 명확히 두는 편이 자연스럽다.

2. 목표 몸무게까지 입력받기

Scanner sc = new Scanner(System.in);
int current = sc.nextInt();
int goal = sc.nextInt();
int week = 1;

while (current > goal) {
    System.out.print(week + "주차 감량: ");
    int loss = sc.nextInt();
    if (loss <= 0) {
        System.out.println("감량값은 1 이상이어야 합니다.");
        continue;
    }
    current -= loss;
    week++;
}
System.out.println(current + "kg 달성");

원문 1의 핵심은 current -= loss다. 이 갱신이 없으면 조건이 영원히 바뀌지 않아 무한 반복이 된다. 잘못된 입력에서 continue를 사용하면 몸무게와 주차를 변경하지 않고 다시 입력받을 수 있다.

728x90

3. 오답이 5번 쌓이면 끝나는 덧셈 게임

Random random = new Random();
int wrong = 0;

while (wrong < 5) {
    int a = random.nextInt(10) + 1;
    int b = random.nextInt(10) + 1;
    System.out.print(a + " + " + b + " = ");
    int answer = sc.nextInt();

    if (answer == a + b) {
        System.out.println("SUCCESS");
    } else {
        wrong++;
        System.out.println("FAIL (" + wrong + "/5)");
    }
}
System.out.println("GAME OVER");

원문 29는 전체 문제 수가 아니라 틀린 횟수를 상태로 사용한다. 정답일 때는 wrong이 늘지 않으므로 사용자는 오답을 다섯 번 낼 때까지 계속 도전한다.

4. 두 수가 모두 0일 때만 종료하기

while (true) {
    int a = sc.nextInt();
    int b = sc.nextInt();

    if (a == 0 && b == 0) {
        break;
    }
    System.out.println(a - b);
}

원문 32의 문장은 “A와 B가 모두 0”이다. 따라서 &&가 맞다. a == 0 || b == 0을 쓰면 둘 중 하나만 0이어도 프로그램이 끝나는 오류가 생긴다.

5. 실수하기 쉬운 부분

상태를 갱신하지 않는다

조건에 사용한 변수가 반복문 안에서 바뀌는지 확인한다. 바뀌지 않으면 종료할 수 없다.

종료 입력도 계산한다

0, 0을 확인한 직후 break해야 한다. 뺄셈을 먼저 출력하면 종료 신호가 결과처럼 보인다.

문장의 ‘모두’와 ‘하나라도’를 바꾼다

“모두”는 &&, “하나라도”는 ||로 번역한 뒤 경계 입력을 직접 대입해 본다.

핵심 요약
  • while문은 횟수보다 상태와 종료 조건을 먼저 설계한다.
  • 반복 조건에 쓰인 상태는 본문에서 반드시 갱신한다.
  • 종료 신호는 계산보다 먼저 검사한다.
  • “두 값 모두 0”은 && 조건이다.
728x90