Java/백준알고리즘

[Java] 백준알고리즘 #10990 별 찍기 - 15

Sehyeok20 2021. 3. 23. 17:54
반응형

백준알고리즘 #10990 별 찍기 - 15 문제

속이 빈 트리모양의 별을 출력하는 문제이다.

 

2021.01.12 - [C/백준알고리즘] - [C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리)

 

[C] 백준알고리즘 #2442 #2443 별 찍기 - 5 , 6 (트리, 역트리)

마치 트리모양의 별을 찍는 문제이다. 규칙을 찾아보면 빈칸은 N-1개부터 차례대로 줄어들고 *의 갯수는 1,3,5,7 ... 2n-1 개 만큼 늘어난다. 친절하게도 문제에서 N번째 줄에는 2*N-1개 라고 정의해주

sehyeok.tistory.com

for문 구성은 C나 Java나 동일하므로 앞서 작성했던 트리 모양의 별 찍기를 참고해보자.

 

위와같은 트리 구조에서 가운데가 비어있는 공간을 만들어야 하므로 별을 하나만 찍어야 한다.

앞선 코드를 조금 수정해보자.

for (int i = 0; i < n; i++) {
	for (int j = n - 1; j > i; j--) {
		System.out.print(" ");
	}
	System.out.print("*");
}

앞서 했던 예시에서는 i가 1부터 시작했지만 이번에는 0부터 시작하여 j의 범위를 n-1부터 시작하도록 하였다.

빈칸을 찍고 나서 *을 하나만 찍으려면 for문이 끝나고 나서 *을 찍으면 되겠다. 위 결과는 다음과 같이 나온다.

예시

이제 이어서 빈칸을 찍는 코드를 작성해보자.

for (int i = 0; i < n; i++) {
	for (int j = n - 1; j > i; j--) {
		System.out.print(" ");
	}
    System.out.print("*");
	for (int j = 0; j < 2 * i - 1; j++) {
		System.out.print(" ");
	}
}

앞선 코드에서 *을 빈칸으로 바꾸었다.

 

이제 마지막으로 *을 하나 출력해주고 줄을 바꾸어주면 된다.

for (int i = 0; i < n; i++) {
	for (int j = n - 1; j > i; j--) {
		System.out.print(" ");
	}
    System.out.print("*");
	for (int j = 0; j < 2 * i - 1; j++) {
		System.out.print(" ");
	}	
	if (i > 0)
		System.out.print("*");

	System.out.println("");
	}
}

다만 이 때, 첫 줄에는 별이 하나만 있으므로 i = 0 (첫번째 줄)은 제외하고 i가 1일때부터 *을 출력해주고 줄을 바꿔주면 된다.

 

전체 코드를 보면 다음과 같다.

import java.util.Scanner;

public class Back10990 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();

		for (int i = 0; i < n; i++) {
			for (int j = n - 1; j > i; j--) {
				System.out.print(" ");
			}
			System.out.print("*");
			for (int j = 0; j < 2 * i - 1; j++) {
				System.out.print(" ");

			}
			if (i > 0)
				System.out.print("*");

			System.out.println("");
		}
	}

}
반응형