본문 바로가기
Programming/기타

[JAVA] 별표 피라미드 출력

by Bam_t 2021. 2. 22.
728x90

 

import java.util.Scanner;

public class OnStudy {
	static void starPyramid(int column) {
        for (int i = 0; i < column; i++) { //입력받은 단만큼 반복하기 위한 반복문
            for (int j = 0; j < column - i - 1; j++) { //해당 행에서의 공백을 위한 반복문
                System.out.print(" ");
           	}	
            for (int k = 0; k < (i * 2 + 1); k++) { //해당 행에서의 별을 찍기 위한 반복문
                System.out.print("*");
            }
            System.out.println();
        }
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("단 :");
        int column = scanner.nextInt();

        starPyramid(column);
    }
}//EndOfClass

 

지난번에 본 삼각형 찍기와 마찬가지로 먼저 공백을 찍어주고 별을 찍는다는 생각을 이용합니다.

공백은 삼각형때와 마찬가지로 i행에서 (입력받은 단수 - i)개 만큼 찍습니다. 그러나 오른쪽 부분의 공백은 생각하지 않아도 됩니다.

 

예를 들어 10단의 피라미드라고 한다면 1번째 줄에는 공백문자 9개 , 2번째 줄에는 공백문자 8개...... 10번째 줄에는 공백문자 0개, 이런식으로 공백문자가 줄어듭니다. 위의 소스코드에서는 단수를 1이 아닌 0부터 시작했기때문에 추가로 1을 더 빼주어야 합니다. 그래서 공백을 찍는 조건식에는 입력받은 단수 - i - 1 라는 조건식이 들어가게 됩니다.

for (int j = 0; j < column - i - 1; j++)	//해당 행에서의 공백을 위한 반복문

 

 

피라미드에서 별을 찍을 경우 처음에 별 한개에서 시작해서 한 줄씩 늘어날경우 이전줄에서 2만큼 별이 더 생깁니다.

그러므로 i행에서 한 줄에 (i-1)*2+1개의 별을 출력해야합니다.

 

예를들어 1행을 출력한다고 하면 1개의 별을 출력해야합니다.

(1-1)*2+1 = 1

for (int k = 0; k < (i * 2 + 1); k++)	//해당 행에서의 별을 찍기 위한 반복문

 

하지만 위의 코드에서는 행을 셀 때 0부터 세어주었으므로, 두번째 반복문의 조건식의 (i-1)에서 1을 빼주는 과정을 생략했습니다.

만약 빼주지 않고 그대로 적용한다면, (0-1)*2+1 = -1이 되기 때문에 1행에는 아무것도 출력되지 않고 2행부터 출력이 시작됩니다.

 

 

 

728x90

댓글