본문 바로가기
백준알고리즘

백준알고리즘:p2447 별찍기 10

by socialcomputer 2021. 3. 28.
반응형

분류: 재귀

 

문제

 

코드

//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨 
package recursion;

import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

//진심 너무 어렵다
public class p2447 {
/*
 ***
 * * 
 ***
 */	static char[][] array;
	public static void main(String args[]) throws IOException{
	 Scanner sc = new Scanner(System.in);
	 int N = sc.nextInt();
	 array = new char[N][N];
	 for(int i=0; i<N; i++) {
		 Arrays.fill(array[i], ' ');
	 }
	 makeStar(0, 0, N);
	 for(int i=0; i<N; i++) {
		 System.out.println(array[i]);
	 }
	 
	 sc.close();
 }
	
	static void makeStar(int x, int y, int num) {
		if(num==1) {
			array[x][y] = '*';
			return;
		}
		int val = num/3;
		for(int a=0; a<3; a++) {
			for(int b=0; b<3; b++) {
				if(a==1 && b==1) continue;
				else makeStar(x+a*val, y+b*val, val);
			}
		}
	}
}

▶아직 온전히 내가 풀진 못하겠다.. 너무 어렵다ㅠ

▶설명

***

* *

***

이 무늬를 보면 이차원배열x=1, y=1일때 공백인 것을 알 수 있다.

이 다음 크기인 가로가 9인 경우에도 

3등분으로 잘라서 보면 이차원배열x=1, y=1일때 공백인 것을 알 수 있다. 

 

 

 

▶재귀호출 할 때마다 메소드를 출력해 보니 아래처럼 나왔다. 

star(0, 0, 9)
star(0, 0, 3)
star(0, 0, 1)  이 빨간색이 한 묶음*** 인 것을 알 수 있다.
star(0, 1, 1)                            * *
star(0, 2, 1)                            ***
star(1, 0, 1)   이 다음은 원래 star(1, 1, 1)인데 a와 b가 1이면 continue이므로 지나갔다.=공백
star(1, 2, 1)
star(2, 0, 1)
star(2, 1, 1)
star(2, 2, 1)
star(0, 3, 3)
star(0, 3, 1)
star(0, 4, 1)
star(0, 5, 1)
star(1, 3, 1)
star(1, 5, 1)

...

 

▶다시 풀어보기

 


채점결과

 

링크 www.acmicpc.net/problem/2447

 

2447번: 별 찍기 - 10

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이

www.acmicpc.net

 

반응형

댓글