알고리즘

[백준] 2447 : 별 찍기 <JAVA>

HBean_ 2021. 1. 8. 15:58

문제: 3의 배수인 N을 입력받을 경우, N/3 * N/3 크기의 사각형을 N/3 의 결과값으로 둘러싼 사각형 출력하기

 

예시

 

<main 함수>

1. 3의 배수 N을 입력받아 2차원 배열의 크기 설정

2. 2차원 배열을 공백으로 초기화

3. 재귀함수 star로 배열에 * 채우기

4. 2차원 배열 출력

 

<star 함수>

- 파라미터 : x,y 어레이 시작점, n 어레이 사이즈 (가로, 세로 길이)

1. N==1 이면 arr[x][y]에 * 찍기

2. 아닐 경우 해당 크기의 배열을 9등분하여 시작점(제일 왼쪽 위 위치) 기준으로 N/3으로 재귀함수 콜

3. 만약 9등분 배열에서 중앙 배열일 경우 재귀함수 callX

import java.util.*;

public class Main {
	
	static char arr[][]; //n크기만큼 2차원 배열을 생성

	public static void star(int x,int y,int n) { //x,y: 시작 포인트 위치
		if(n==1){
      arr[x][y]= '*';

    }else{
      int div = n/3;

      for(int fx =0;fx<3;fx++){
        for(int fy=0;fy<3;fy++){
          if(fx==1 && fy==1)
            continue;
          star(x+(div*fx),y+(div*fy),div);
        }
      }
    }

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

		//2차원 배열 공백으로 채우기
		for(int i=0;i<arr.length;i++) {
			Arrays.fill(arr[i],' ');
		}
		//재귀함수 call
		star(0,0,n);

    	//출력
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		
	}
}

완전 고생한 문제...