이 글에서는 자바(Java)를 활용해 미러 하단 별 삼각형(mirror lower star triangle) 패턴을 출력하는 방법을 알아봅니다. 이 패턴은 여러 개의 for 반복문과 print 문을 조합해 만들 수 있으며, 중첩 반복문의 동작 원리를 익히기 좋은 대표적인 연습 예제입니다.
입력·출력 예시
입력
사용자가 아래와 같이 행(row)의 개수를 입력한다고 가정해 보겠습니다.
Enter the number of rows : 8
출력
위 입력값에 대한 기대 출력 결과는 다음과 같습니다.
The mirror lower star triangle pattern : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
알고리즘
프로그램의 전체적인 동작 흐름은 다음과 같습니다.
- 시작(START)합니다.
- 정수 변수 i, j, k와 my_input을 선언합니다.
- 사용자로부터 필요한 값을 입력받거나, 값을 미리 정의합니다.
- 두 개의 중첩 for 반복문을 순회하며 문자 앞에 들어갈 공백을 출력합니다.
- 안쪽 반복문이 끝나면 또 다른 for 반복문을 통해 '*' 문자를 출력합니다.
- 한 줄의 출력이 끝날 때마다 줄바꿈을 수행해 각 줄에 지정된 개수의 문자가 표시되도록 합니다.
- 완성된 패턴을 화면에 표시합니다.
- 종료(STOP)합니다.
패턴 생성 원리
미러 하단 별 삼각형은 상하 대칭 구조를 가지고 있습니다. 위쪽 절반에서는 행 번호가 증가할수록 선행 공백이 하나씩 늘어나고 별의 개수는 하나씩 줄어듭니다. 아래쪽 절반에서는 그 반대로 공백이 줄어들고 별이 늘어나면서 마치 거울에 비친 것처럼 대칭을 이룹니다. 이러한 규칙을 두 개의 반복문 블록으로 구현하면 됩니다.
예제 1 - 사용자 입력으로 출력하기
아래 예제에서는 Scanner 객체를 사용해 사용자로부터 행의 개수를 입력받은 뒤 패턴을 출력합니다.
import java.util.Scanner;
public class MirrorTriangle{
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 of rows : ");
my_input = my_scanner.nextInt();
System.out.println("The Mirror Lower Star Triangle pattern : ");
for (i = 1; i <= my_input; i++) {
for (j = 1; j < i; j++) {
System.out.print(" ");
}
for (j = i; j <= my_input; j++) {
System.out.print("*" + " ");
}
System.out.println();
}
for (i = my_input - 1; i >= 0; i--) {
for (j = 0; j < i; j++) {
System.out.print(" ");
}
for (j = i; j <= my_input - 1; j++) {
System.out.print("*" + " ");
}
System.out.println();
}
}
}출력 결과
Required packages have been imported A reader object has been defined Enter the number of rows : 8 The Mirror Lower Star Triangle pattern : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
예제 2 - 값이 미리 정의된 경우
아래 예제에서는 행의 개수가 코드 안에 미리 정의되어 있으며, 이 값을 그대로 사용해 콘솔에 패턴을 출력합니다.
public class MirrorTriangle{
public static void main(String args[]){
int i, j, k, my_input;
my_input = 8;
System.out.println("The number of rows is defined as " +my_input);
System.out.println("The mirror lower star triangle pattern : ");
for (i = 1; i <= my_input; i++) {
for (j = 1; j < i; j++) {
System.out.print(" ");
}
for (j = i; j <= my_input; j++) {
System.out.print("*" + " ");
}
System.out.println();
}
for (i = my_input - 1; i >= 0; i--) {
for (j = 0; j < i; j++) {
System.out.print(" ");
}
for (j = i; j <= my_input - 1; j++) {
System.out.print("*" + " ");
}
System.out.println();
}
}
}출력 결과
The number of rows is defined as 8 The mirror lower star triangle pattern : * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
마무리
지금까지 자바의 중첩 for 반복문을 활용해 미러 하단 별 삼각형 패턴을 출력하는 두 가지 방법을 살펴보았습니다. Scanner로 사용자 입력을 받는 방식과 값을 미리 정의해 두는 방식 모두 동일한 반복문 구조를 사용하므로, 상황에 맞게 골라 활용하시면 됩니다. 공백과 별의 개수 규칙만 이해하면 피라미드, 다이아몬드 등 다양한 패턴으로 손쉽게 확장할 수 있습니다.