[백준 2448] 별 찍기 - 11

One-nt·2022년 7월 19일
0

백준

목록 보기
5/19
post-custom-banner

문제 출처

사용 언어: Java

  1. 구상
  • 줄마다 별의 규칙 찾기
    → 줄마다 공백의 수와 별과 별사이의 공백이 다르므로 다른 규칙 이용

  • 배열을 생성하여 별의 구성을 저장한 후, 재귀호출 이용하기
    → 중복되는 별 모양을 이용

  1. 구현
import java.util.*;
import java.io.*;

public  class Main {	
	
	public static String[] star;
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));	
		//줄 갯수 입력받기
		int num = Integer.parseInt(br.readLine());
		
		//별 모양을 저장할 배열 
		star = new String[num];
		
		//반복되는 별을 배열에 저장
		star[0] = "  *  ";
		star[1] = " * * ";
		star[2] = "*****";
		
		for (int i = 1; 3 * (int)Math.pow(2, i) <= num; i++)
			make(i, star);
		
		for (int i = 0; i < num; i++)
			System.out.println(star[i]);
			
		
	}
	
	//별 형태를 재귀형식으로 출력 
	public static void make(int i, String[] star) {
		//줄 갯수
		int bottom = 3 * (int)Math.pow(2, i);
		// 재귀를 통해 출력해야 하는 부분
		int middle = bottom / 2;
		
		//재귀(저장된 형태를 한줄씩 공백 하나를 포함하여 출력)
		for (int j = middle; j < bottom; j++) {
			star[j] = star[j-middle] + " " + star[j-middle];
		}
		
		//재귀 출력 이전 부분의 공백을 채워주기
		String space = "";
		
		//재귀 출력한 줄 수만큼 좌우에 공백 채워주기
		for (int j = 0; j < middle; j++)
			space += " ";
		
		for (int j = 0; j < middle; j++)
			star[j] = space + star[j] + space;
	
	}
} 

코드 참고

- 반복되는 별 모양을 미리 배열에 저장하고 재귀호출.

- 재귀호출 해야하는 부분을 찾고 (전 부분) + 공백 1개 + (전 부분)으로 배열에 저장

- 재귀호출 전 부분은 좌우 공백을 재귀호출 줄 수만큼 채워주기.

post-custom-banner

0개의 댓글