분류: 재귀
▶문제
▶코드
//백준알고리즘 제출시 클래스 이름은 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
'백준알고리즘' 카테고리의 다른 글
백준알고리즘:p1929 소수 구하기 (0) | 2021.03.31 |
---|---|
백준알고리즘:p11653 소인수분해 (0) | 2021.03.31 |
백준알고리즘:p10870 피보나치 수 5 (0) | 2021.03.28 |
백준알고리즘:p10872 팩토리얼 [재귀] (0) | 2021.03.28 |
백준알고리즘:p2292 벌집 (0) | 2021.03.28 |
댓글