본문 바로가기
자바 (JAVA)

📚 자바 반복문 문제 풀이

by demianpark127 2025. 1. 6.
SMALL
 

📚 자바 반복문 기초 문제 풀이


🔹 1. 1부터 100까지 숫자 출력하기

public class PrintNumbers {
    public static void main(String[] args) {
        for (int i = 1; i <= 100; i++) {
            System.out.print(i + " ");
        }
    }
}

📌 설명:

  • for 반복문을 사용하여 i가 1부터 100까지 증가합니다.
  • 각 숫자를 출력합니다.

🔹 2. 1부터 100까지 짝수만 출력하기

public class PrintEvenNumbers {
    public static void main(String[] args) {
        for (int i = 2; i <= 100; i += 2) {
            System.out.print(i + " ");
        }
    }
}

📌 설명:

  • i를 2부터 시작해 2씩 증가시키며 짝수만 출력합니다.

🔹 3. 1부터 100까지 숫자의 합 구하기

public class SumNumbers {
    public static void main(String[] args) {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("1부터 100까지의 합: " + sum);
    }
}

📌 설명:

  • sum 변수에 각 숫자를 누적합합니다.
  • 반복문 종료 후 결과를 출력합니다.

🔹 4. 팩토리얼 계산하기

import java.util.Scanner;

public class Factorial {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();
        
        int factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial *= i;
        }
        System.out.println(n + "! = " + factorial);
    }
}

📌 설명:

  • Scanner로 사용자 입력을 받습니다.
  • for문으로 1부터 n까지 곱하여 팩토리얼을 계산합니다.
  • 결과를 출력합니다.

🔹 5. N단 구구단 출력하기

 

import java.util.Scanner;

public class MultiplicationTable {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("출력할 구구단의 단(N)을 입력하세요: ");
        int n = scanner.nextInt();
        
        System.out.println(n + "단 구구단:");
        for (int i = 1; i <= 9; i++) {
            System.out.println(n + " × " + i + " = " + (n * i));
        }
    }
}

📌 설명:

  • Scanner로 사용자로부터 단(N)을 입력받습니다.
  • for 반복문으로 1부터 9까지 곱셈을 수행하여 구구단을 출력합니다.
 

📚 자바 반복문 중급 문제 풀이


🔹 1. 100부터 1까지 역순으로 출력하기

public class ReverseNumbers {
    public static void main(String[] args) {
        for (int i = 100; i >= 1; i--) {
            System.out.print(i + " ");
        }
    }
}

📌 설명:

  • for 반복문을 사용해 i를 100부터 시작하여 1씩 감소시키며 출력합니다.

🔹 2. 소수 판별하기

import java.util.Scanner;

public class PrimeNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();
        boolean isPrime = true;

        if (n <= 1) {
            isPrime = false; // 1 이하는 소수가 아님
        } else {
            for (int i = 2; i <= Math.sqrt(n); i++) {
                if (n % i == 0) {
                    isPrime = false;
                    break;
                }
            }
        }

        if (isPrime) {
            System.out.println(n + "은(는) 소수입니다.");
        } else {
            System.out.println(n + "은(는) 소수가 아닙니다.");
        }
    }
}

📌 설명:

  • Scanner로 입력받은 숫자 n이 1 이하이면 소수가 아님.
  • 2부터 √n까지 나누어 떨어지는지 검사.
  • 하나라도 나누어 떨어지면 isPrime을 false로 설정.

 

🔹 3. 숫자 피라미드 출력하기

import java.util.Scanner;

public class NumberPyramid {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 첫 번째 for문: 행을 나타냄 (i)
  • 두 번째 for문: 각 행에서 1부터 i까지 숫자 출력
  • 한 행이 끝나면 System.out.println()으로 줄바꿈

✅ 출력 예시 (N=4):

1  
12  
123  
1234

 

🔹 4. 별 찍기 (삼각형)

import java.util.Scanner;

public class StarTriangle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 첫 번째 for: 행(i)을 반복
  • 두 번째 for: i번째 행에서 i개의 * 출력
  • 각 행이 끝날 때마다 줄바꿈

✅ 출력 예시 (N=4):

*  
**  
***  
****

 

🔹 5. 별 찍기 (역삼각형)

import java.util.Scanner;

public class ReverseStarTriangle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();

        for (int i = n; i >= 1; i--) {
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 첫 번째 for: 행(i)이 n부터 1까지 감소
  • 두 번째 for: i개의 *를 출력
  • 각 행이 끝날 때마다 줄바꿈

✅ 출력 예시 (N=4):

****  
***  
**  
*

코드 요약

1️⃣ 100부터 1까지 출력: for문에서 i-- 사용
2️⃣ 소수 판별: Math.sqrt를 사용한 효율적인 소수 판별
3️⃣ 숫자 피라미드: 중첩 for문 사용
4️⃣ 별 삼각형: 행마다 * 개수 증가
5️⃣ 별 역삼각형: 행마다 * 개수 감소

 

 

📚 자바 반복문 고급 문제 풀이


🔹 1. 피보나치 수열 출력하기

N개의 피보나치 수열을 출력하세요. (예: N=5 → 0, 1, 1, 2, 3)

import java.util.Scanner;

public class FibonacciSequence {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("출력할 피보나치 수열의 항 수(N)를 입력하세요: ");
        int n = scanner.nextInt();

        int a = 0, b = 1;
        System.out.print("피보나치 수열: " + a);

        for (int i = 1; i < n; i++) {
            System.out.print(", " + b);
            int temp = b;
            b = a + b;
            a = temp;
        }
    }
}

📌 설명:

  • 두 변수 a, b를 사용하여 피보나치 수열을 생성.
  • a와 b를 반복문에서 교체하면서 다음 항을 계산.
피보나치 수열: 0, 1, 1, 2, 3

 

🔹 2. 숫자 뒤집기

사용자로부터 숫자 N을 입력받아 숫자를 뒤집어 출력하세요.

import java.util.Scanner;

public class ReverseNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();
        
        int reversed = 0;
        while (n != 0) {
            int digit = n % 10;
            reversed = reversed * 10 + digit;
            n /= 10;
        }

        System.out.println("뒤집은 숫자: " + reversed);
    }
}

📌 설명:

  • n % 10으로 마지막 자릿수를 추출.
  • reversed에 자릿수를 추가하며 역순으로 숫자를 재배치.
  • n /= 10으로 마지막 자릿수를 제거.
뒤집은 숫자: 321

🔹 3. 완전수 판별하기

완전수(perfect number)인지 판별하세요. (예: 6은 1, 2, 3의 합이므로 완전수입니다.)

import java.util.Scanner;

public class PerfectNumber {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();

        int sum = 0;
        for (int i = 1; i <= n / 2; i++) {
            if (n % i == 0) {
                sum += i;
            }
        }

        if (sum == n && n != 0) {
            System.out.println(n + "은(는) 완전수입니다.");
        } else {
            System.out.println(n + "은(는) 완전수가 아닙니다.");
        }
    }
}

📌 설명:

  • for문으로 1부터 n/2까지의 약수를 구해 sum에 더함.
  • sum이 n과 같다면 완전수로 판별.
6은(는) 완전수입니다.

🔹 4. 별 찍기 (다이아몬드)

사용자로부터 숫자 N(홀수)을 입력받아 다이아몬드 모양을 출력하세요.

 

import java.util.Scanner;

public class DiamondPattern {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N(홀수)을 입력하세요: ");
        int n = scanner.nextInt();

        // 위쪽 삼각형
        for (int i = 1; i <= n; i += 2) {
            for (int j = 0; j < (n - i) / 2; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }

        // 아래쪽 삼각형
        for (int i = n - 2; i >= 1; i -= 2) {
            for (int j = 0; j < (n - i) / 2; j++) {
                System.out.print(" ");
            }
            for (int j = 0; j < i; j++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 위쪽 삼각형: 공백과 *를 적절히 조정하여 출력.
  • 아래쪽 삼각형: 공백과 *를 역순으로 출력.
  *  
 ***  
*****  
 ***  
  *

🔹 5. 숫자 합 구하기

 

사용자로부터 숫자 N을 입력받아 각 자리 숫자의 합을 구하세요. (예: N=123 → 1+2+3=6) 

import java.util.Scanner;

public class SumOfDigits {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();
        
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }

        System.out.println("각 자리 숫자의 합: " + sum);
    }
}

📌 설명:

  • n % 10으로 마지막 자릿수를 추출해 sum에 더함.
  • n /= 10으로 마지막 자릿수를 제거.
각 자리 숫자의 합: 6

코드 요약

1️⃣ 피보나치 수열: 두 변수를 사용해 수열 생성.
2️⃣ 숫자 뒤집기: while 반복문으로 숫자 뒤집기.
3️⃣ 완전수 판별: 약수의 합으로 완전수 판별.
4️⃣ 다이아몬드 별 찍기: 위아래 삼각형을 조합.
5️⃣ 숫자 합 구하기: 각 자리 숫자를 합산.

 

🔹 챌린지 문제

 
 
  • 사용자로부터 숫자 N을 입력받아 위와 같은 마름모 숫자를 출력하세요.

📚 자바 반복문 챌린지 문제 풀이


🔹 1. 최대공약수(GCD) 구하기

 

  • 두 정수 N, M의 최대공약수를 구하세요.
import java.util.Scanner;

public class GCD {
    public static int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("첫 번째 숫자 N을 입력하세요: ");
        int n = scanner.nextInt();
        System.out.print("두 번째 숫자 M을 입력하세요: ");
        int m = scanner.nextInt();

        System.out.println("최대공약수(GCD): " + gcd(n, m));
    }
}

📌 설명:

  • 유클리드 호제법을 사용하여 최대공약수를 구함.
  • a % b의 결과를 새로운 b로 대체하고 반복.

✅ 출력 예시:

첫 번째 숫자 N을 입력하세요: 56  
두 번째 숫자 M을 입력하세요: 98  
최대공약수(GCD): 14

 

🔹 2. 자리수 정렬 (내림차순)

  • 사용자로부터 숫자 N을 입력받아 각 자리 숫자를 내림차순으로 정렬하세요.
    (예: N=325 → 532)
import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;

public class DigitSort {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        String n = scanner.next();

        Character[] digits = new Character[n.length()];
        for (int i = 0; i < n.length(); i++) {
            digits[i] = n.charAt(i);
        }

        Arrays.sort(digits, Collections.reverseOrder());

        System.out.print("내림차순 정렬: ");
        for (char digit : digits) {
            System.out.print(digit);
        }
    }
}

📌 설명:

  • 문자열로 입력받아 각 문자를 배열에 저장.
  • Arrays.sort와 Collections.reverseOrder로 내림차순 정렬.
  • 정렬된 배열을 출력.

✅ 출력 예시:

숫자 N을 입력하세요: 325  
내림차순 정렬: 532

 

🔹 3. 1부터 N까지 소수 출력하기

  • 사용자로부터 숫자 N을 입력받아 1부터 N까지의 모든 소수를 출력하세요.
import java.util.Scanner;

public class PrimeNumbers {
    public static boolean isPrime(int num) {
        if (num <= 1) return false;
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요: ");
        int n = scanner.nextInt();

        System.out.println("1부터 " + n + "까지의 소수:");
        for (int i = 1; i <= n; i++) {
            if (isPrime(i)) {
                System.out.print(i + " ");
            }
        }
    }
}

📌 설명:

  • isPrime 메서드로 소수 여부를 판별.
  • 1부터 n까지 반복하여 소수만 출력.

✅ 출력 예시:

숫자 N을 입력하세요: 10  
1부터 10까지의 소수: 2 3 5 7

 

🔹 4. 2차원 배열 별 출력 (겉만 별)

  • N x N의 겉만 별(*)로 채워진 사각형을 출력하세요.
import java.util.Scanner;

public class HollowSquare {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N을 입력하세요 (NxN 사각형): ");
        int n = scanner.nextInt();

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == 0 || i == n - 1 || j == 0 || j == n - 1) {
                    System.out.print("* ");
                } else {
                    System.out.print("  ");
                }
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 첫 번째와 마지막 행(i == 0 or i == n-1)은 모두 *.
  • 첫 번째와 마지막 열(j == 0 or j == n-1)은 모두 *.
  • 나머지는 공백으로 출력.

✅ 출력 예시 (N=4):

* * * *  
*     *  
*     *  
* * * *

🔹 5. 마름모 숫자 출력

import java.util.Scanner;

public class DiamondNumbers {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("숫자 N(홀수)을 입력하세요: ");
        int n = scanner.nextInt();

        int mid = n / 2;

        // 위쪽 마름모
        for (int i = 0; i <= mid; i++) {
            for (int j = 0; j < mid - i; j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i + 1); j++) {
                System.out.print(j);
            }
            System.out.println();
        }

        // 아래쪽 마름모
        for (int i = mid - 1; i >= 0; i--) {
            for (int j = 0; j < mid - i; j++) {
                System.out.print(" ");
            }
            for (int j = 1; j <= (2 * i + 1); j++) {
                System.out.print(j);
            }
            System.out.println();
        }
    }
}

📌 설명:

  • 위쪽: 공백과 숫자 출력.
  • 아래쪽: 위쪽을 역순으로 출력.
  • mid를 기준으로 상/하 대칭 구조.

✅ 출력 예시 (N=5):

  1  
 123  
12345  
 123  
  1

코드 요약

1️⃣ 최대공약수: 유클리드 호제법 사용
2️⃣ 자리수 정렬: 문자열 배열 정렬
3️⃣ 소수 출력: isPrime 메서드 사용
4️⃣ 2차원 배열 별: 겉만 별 출력
5️⃣ 마름모 숫자: 공백과 숫자 조합

 

 

 

LIST