Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 다이아몬드 별 패턴 출력하는 프로그램 만들기

이 글에서는 자바(Java)를 사용해 다이아몬드 별 패턴을 콘솔에 출력하는 방법을 단계별로 알아봅니다. 이 패턴은 여러 개의 for 반복문과 print 문을 중첩해 구현할 수 있으며, 반복문 로직을 연습하기에 가장 대표적인 예제 중 하나입니다.

실행 결과 미리 보기

입력

사용자가 원하는 행(row)의 개수를 입력한다고 가정해 보겠습니다.

Enter the number of rows : 8

출력

입력값이 8일 때 기대되는 출력은 다음과 같습니다.

The diamond star pattern :
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
 *************
  ***********
   *********
    *******
     *****
      ***
       *

알고리즘

다이아몬드 패턴은 위쪽 절반(피라미드)과 아래쪽 절반(역피라미드)으로 나누어 생각하면 훨씬 이해하기 쉽습니다. 전체적인 처리 흐름은 다음과 같습니다.

  1. 시작 – 프로그램을 실행합니다.
  2. 정수형 변수 i, j, k, my_input을 선언합니다.
  3. 사용자로부터 행의 개수를 입력받거나, 값을 코드에서 미리 정의합니다.
  4. 변수 kmy_input - 1 값을 저장합니다. (첫 줄 앞에 들어갈 공백의 개수)
  5. 중첩 for 반복문을 돌며 별 앞에 들어갈 공백을 출력합니다.
  6. 공백 출력이 끝나면 별(*)을 출력하는 for 반복문을 실행합니다.
  7. 한 줄이 완성될 때마다 줄바꿈을 출력해 다음 줄로 넘어갑니다.
  8. 위쪽 절반이 끝나면 같은 방식으로 아래쪽 절반(역방향)을 출력합니다.
  9. 결과를 화면에 표시하고 프로그램을 종료합니다.

패턴의 동작 원리

핵심 규칙은 다음 두 가지입니다.

  • 위쪽 절반: j번째 줄에서 공백은 (my_input - j)개, 별은 (2 × j − 1)개를 출력합니다. 별의 개수가 1, 3, 5, 7…처럼 홀수로 늘어나면서 피라미드 형태가 만들어집니다.
  • 아래쪽 절반: j번째 줄에서 공백은 j개, 별은 (2 × (my_input − j) − 1)개를 출력합니다. 이번에는 별이 점점 줄어들면서 역피라미드, 즉 다이아몬드의 아래 부분이 완성됩니다.

예제 1 – 사용자 입력을 받는 경우

아래 예제는 Scanner 클래스를 사용해 사용자로부터 행의 개수를 직접 입력받은 뒤, 해당 크기의 다이아몬드 패턴을 출력합니다.

import java.util.Scanner;
public class DiamondStar {
   public static void main(String args[]) {
      int i, j, k, my_input;
      System.out.println("Required packages have been imported");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("A reader object has been defined ");
      System.out.print("Enter the number : ");
      my_input = my_scanner.nextInt();
      k = my_input - 1;
      System.out.println("The diamond star pattern : ");
      for (j = 1; j <= my_input; j++) {
         for (i = 1; i <= k; i++) {
            System.out.print(" ");
         }
         k--;
         for (i = 1; i <= 2 * j - 1; i++) {
            System.out.print("*");
         }
         System.out.println("");
      }
      k = 1;
      for (j = 1; j <= my_input - 1; j++) {
         for (i = 1; i <= k; i++) {
            System.out.print(" ");
         }
         k++;
         for (i = 1; i <= 2 * (my_input - j) - 1; i++) {
            System.out.print("*");
         }
         System.out.println("");
      }
   }
}

출력

Required packages have been imported
A reader object has been defined
Enter the number : 8
The diamond star pattern :
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
 *************
  ***********
   *********
    *******
     *****
      ***
       *

예제 2 – 값이 미리 정의된 경우

이번 예제는 입력 과정 없이 행의 개수를 코드 안에서 8로 고정한 뒤, 결과를 곧바로 확인하는 방식입니다.

public class DiamondStar {
   public static void main(String args[]) {
      int i, j, k, my_input;
      my_input = 8;
      k = my_input - 1;
      System.out.println("The number of rows is defined as " + my_input);
      System.out.println("The diamond star pattern : ");
      for (j = 1; j <= my_input; j++) {
         for (i = 1; i <= k; i++) {
            System.out.print(" ");
         }
         k--;
         for (i = 1; i <= 2 * j - 1; i++) {
            System.out.print("*");
         }
         System.out.println("");
      }
      k = 1;
      for (j = 1; j <= my_input - 1; j++) {
         for (i = 1; i <= k; i++) {
            System.out.print(" ");
         }
         k++;
         for (i = 1; i <= 2 * (my_input - j) - 1; i++) {
            System.out.print("*");
         }
         System.out.println("");
      }
   }
}

출력

The number of rows is defined as 8
The diamond star pattern :
       *
      ***
     *****
    *******
   *********
  ***********
 *************
***************
 *************
  ***********
   *********
    *******
     *****
      ***
       *

마무리

다이아몬드 별 패턴은 '공백 개수'와 '별 개수'의 변화 규칙만 이해하면 누구나 쉽게 구현할 수 있습니다. 위 예제에서 행의 개수를 다양하게 바꿔 실행해 보면 패턴이 어떻게 달라지는지 직관적으로 익힐 수 있습니다. 이 원리를 응용하면 삼각형, 피라미드, 모래시계 등 다른 형태의 별 패턴도 손쉽게 만들 수 있으니 꼭 직접 실습해 보시기 바랍니다.