본문 바로가기
  • NerdCodX Blog
자바(Java)

Java Day 5: 이중 For문으로 배우는 다양한 별 그리기 예제

by NerdCodeX 2025. 1. 24.

안녕하세요, NerdCodeX입니다! 😊
프로그래밍의 매력 중 하나는 반복되는 작업을 간단한 코드로 자동화할 수 있다는 점입니다. 특히 이중 For문은 이러한 반복 작업을 이해하고 활용하는 데 매우 중요한 문법입니다.

오늘은 지난 시간에 배운 반복문 For문을 활용하여 다양한 형태의 별 모양을 그려보는 예제를 실습해 보겠습니다. 별 그리기 예제는 이중 For문의 기본 구조를 익히는 데 매우 효과적이며, 코드를 통해 프로그래밍 논리와 패턴을 이해할 수 있습니다.

직삼각형, 역삼각형, 피라미드부터 다이아몬드와 같은 응용 예제까지 차근차근 연습하며 반복문의 활용도를 높여봅시다. 이번 학습은 다음 단계로 나아가기 전 필수적인 훈련입니다. 그럼 시작해볼까요? 😊


1.직삼각형 - 기본 (2중 Loop)

가장 기본이 되는 별그리기이다. 이중for문을 사용하여야 한다.
위에서부터 별의 숫자를 늘려가는 방법이다. 
i가 증가하면서 별을 실제로 찍는 j의 최대 찍는 수를 i를 통해 늘려가는 구조이다.
즉 처음에는 i가 1이므로 j의 최대는 1이지만 i가 5가 되면 j는 최대치가 5가 되어 5개의 별을 찍게 되는것이다. 
i의 수를 늘리는 만큼 삼각형이 커지게 된다. 
        for (int i = 1; i <= 5; i++) { 
            for (int j = 1; j <= i; j++) {
                System.out.print("*");
           }
            System.out.println();
       }   
결과
 

2.직삼각형 - 확장 (3중 Loop)

위의 기본 삼각형이 왼쪽에 붙어서 오른쪽에 경사를 진 삼각형이였다면, 이번 삼각형은 오른쪽에 직각이 되고 왼편이 경사가 있는 삼각형이다. 
모양은 간단해 보이나 이번에는 3중  반복 for문을 사용해야 한다. 
그리고 한번더 고민을 해야할 부분이 있으니 보이기에는 오른쪽에 정렬된듯 하지만 실제 코드에서는 빈 여백을 출력하여 그렇게 보이도록 한것이다. 
i변수가 가장 밖에서 전체를 감싸고 최대치를 조정한다. 그 안에 두개의 for문이 각자 돌아가게 되어있다. 
j변수는 첫 별을 그렸던과 마찬가지의 역할을 한다. 단 이번에는 별 대신 " " 공백을 그려줘야 한다. 
그리고 또다른 k 변수가 실제 별을 그려주게 된다. 
실제로는 첫줄에 별이 오른쪽에 위치한 것이 아니라 그 앞에 " " 진 여백이 4칸 자리 하고 있는 것이다. 
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k <= i; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과
 

3.역직삼각형 - 기본 (2중 Loop)

역삼각형은 1.직삼각형과 동일한 구조이다. 단 i변수가 1에서 5로 증가했다면 이번에는 반대로 5에서 1로 감소하게 해야한다. 당연히 i++이 아닌 i--를 이용하는 것이다. 
또한 시작이 int i=1에서 int i =5로 시작해야한다. 
for 문에서 증가 형태인 i++과 반대 감소 형태인 i--를 자유롭게 사용하는 것은 중요하다. 
           for (int i = 5; i >= 1; i--) {
            for (int k = 1; k<= i; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과
 

4.역직삼각형 - 확장 (3중 Loop)

마찬가지로 역삼각형을 오른편이 직각인 삼각형을 만드는 연습이다. 

방법은 위에 언급한것과 동일하다. 단지 증가가 아닌 감소를 이용해서 처음에는 별을 그리는 k 변수의 값이 많다가 감소하고 반대로 빈칸을 그리는 j 변수의 값이 적다가 많아지게 하면 된다. 

           for (int i = 5; i >= 1; i--) {
            for (int j = 0; j < 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k<= i; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과
 

5.정삼각형 - 피라미드 

이제 조금더 머리를 써야하는 for문이다. 기본은 2.직각삼각형과 유사한 3중 for문이나 기존의 직각삼각형에서 정삼각형이 되어야 한다. 일명 피라미드라고도 하며 for문 공부에 자주 등장하는 예제이기도 하다. 
기본 구조는 말한바와 같이 2.직각삼각형과 유사해 보인다. 그런데 차이가 있는것을 살펴보니 별을 그리는 부분에서 그 차이가 나타난다. 
별이 1>3>5>7>9 식으로 증가하고 있다. 단순이 1씩 증가하는것이 아니라는 것이다. 
쉽게 변수 i에 *2를 한다면 2>4>6>8>10으로 증가할것이다. 여기에 우리가 원하는 홀수를 만들기 위해 -1을 해준것이다. 
프로그래밍을 할 때 처음 겪는 두려움(특히 나와같은 이과를 전공하지 않은 사람들)은 수학을 하지 못하는데 과연 프로그래밍을 할수 있을까이다. 
물론 수학을 잘하는것은 분명 도움이 된다. 하지만 그보다 논리적인 사고가 더욱 중요한것 같다. 
아래의 예제에서 수학이라고 할 정도의 것이 등장하지는 않는다. 하지만 논리적으로 고민하고 생각해 봐야 하는 부분이 있는 것은 확실해 보인다. 
그러니 수학책을 수십년동안 던저버린 아재라도 한번 도전해볼 수 있다는 것이다. 
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k <= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과
 

6.역정삼각형 - 역 피라미드 

이제 피라미드를 반대로 뒤집어 보자. 방법은 동일하다. 위에서 배운 4.역직삼각형에 i*2-1 를 해주면 해결된다. 
        for (int i = 5; i >= 1; i--) {
            for (int j = 0; j < 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k<= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과
 

7.모래시계 - 응용 형태 1

이제 복잡한 형태를 만들기로 해보자. 

 

첫번쨰는 모래시계 모양을 만들어 보는것이다. 얼핏 코드만 보아도 무언가 복잡함이 느껴질수 있을 것이다. 
방법은 우선 역정삼각형을 그리고 그다음 정삼각형을 그리면 된다. 
결국 우리가 배운 위의 두가지를 연결해 붙이면 되는 것이다. 코드가 긴것 뿐이지 새로운 것은 아닌 것이다. 
실제로 상담 부분 모든 코드와 방법을 기억하는 것은 불가능한것 같다. 특히 우리와 같은 초보들에게는 말이다. 그래서 이러한 방법들을 잘 기록하거나 찾아가면서 코딩을 하는 것이 중요하다. 
내가 모든 방법론을 기억하기 보다는 구글링을 통해 빠르게 잘 찾아 쓰는것이 중요하다는 것이다. 
        for (int i = 5; i >= 1; i--) {
            for (int j = 0; j < 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k<= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
        // 정삼각형
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k <= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과

 

8. 다이아몬드- 응용형태 2

마지막 예제는 다이아몬드 형태이다. 

마찬가지로 두가지 형태를 붙이면 된다. 단지 순서만 정삼각형이 먼저 그뒤에 역삼각형을 그려주면 된다. 

        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k <= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
        
        for (int i = 5; i >= 1; i--) {
            for (int j = 0; j < 5-i; j++) {
                System.out.print(" ");
           }
            for (int k = 1; k<= i*2-1; k++) {
                      System.out.print("*");
                }
            System.out.println();
       }
결과

오늘은 이중 For문을 활용하여 다양한 별 모양을 그려보는 예제를 실습했습니다. 기본 직삼각형부터 시작하여, 역삼각형, 피라미드, 모래시계, 다이아몬드 등 응용된 패턴까지 다뤘습니다.

이중 For문은 반복문과 배열을 학습할 때 필수적인 문법이며, 이 과정에서 논리적 사고와 프로그래밍 패턴을 이해할 수 있습니다. 특히, 여러 개의 For문을 중첩해 사용하는 연습은 추후 복잡한 알고리즘을 다룰 때 큰 도움이 될 것입니다.

다음 시간에는 다른 형태의 반복문과 조건문을 심화 학습하며, 반복문의 활용도를 더욱 넓혀보겠습니다. 반복과 실습을 통해 프로그래밍의 기본기를 다지며 함께 성장해 나갑시다! 😊