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
'Programming > 기타' 카테고리의 다른 글
[C] while문을 이용한 구구단 (0) | 2021.02.23 |
---|---|
[C] 입력 받은 숫자로 구구단 출력하기 (+역순으로 출력) (0) | 2021.02.22 |
[C] for문을 이용한 구구단 출력 (0) | 2021.02.22 |
[JAVA] 반복문 이용하여 별표 직각삼각형 출력하기 (0) | 2021.02.22 |
[JAVA] 4개의 정수를 입력 받아 최댓값과 최솟값 구하기 (0) | 2021.02.22 |
댓글