반응형
까다로워 보인다.
3의 거듭제곱을 적고 그 적은 N만큼 N*N 행렬을 그린다.
3*3 사이에는 공백을 집어넣고 그 3*3행렬이 또 1이 되어 세 개가 모이면 (9*9가 되면) 가운데 3*3행렬은 공백이 된다.
다음 제곱인 27도 마찬가지 패턴으로 채워 넣으면 위와 같이 출력이 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.util.Arrays;
import java.util.Scanner;
public class Main{
//baekjoon 2447번 별 찍기 - 10 재귀
public static char[][] arr;
public static void solve(int n, int x, int y) {
if(n==1) {
arr[x][y] = '*';
return;
}
int value = n/3;
for(int i=0; i<3; i++) {
for(int j=0; j<3; j++) {
if(i==1 && j ==1)
continue;
else
solve(value, x+(value*i), y+(value*j));
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
arr = new char[n][n];
for(int i=0; i<n; i++) {
Arrays.fill(arr[i], ' ');
}
solve(n, 0, 0);
for(int i=0; i<n; i++) {
System.out.println(arr[i]);
}
}
}
|
cs |
N은 3의 배수를 입력한다.
6행 : *과 공백을 채워 넣을 이중 배열 선언
8행 : solve 함수 파라미터로 n, x, y를 받는다.
9행 : if문 n이 1이면 그 위치에 *을 입력하고 함수 종료
13행 : n(3의 제곱)을 3으로 나눠서 몫을 value에 넣는다.
17행 : i가 1, j가 1이면 가운데 공백을 넣을 위치 continue로 넘어간다.
20행 : 3으로 나눈 value, x+value*i, y+value*j 를 넘기면서 함수를 재호출한다.
28행 : 입력받은 n으로 arr[][]배열 크기 초기화
31행 : 배열 arr을 ' '공백으로 초기화
33행 : solve함수 호출 (n, 0, 0)
이해가 잘 안가는 부분이 있으면 하나씩 손코딩으로 데이터 흐름을 그리면서 하면 이해는 잘 된다.
반응형
'프로그래밍 > 백준 알고리즘 코드' 카테고리의 다른 글
백준 2798번 JAVA 자바 블랙잭 [브루트 포스] (0) | 2021.08.17 |
---|---|
백준 11729번 java 하노이 탑 이동 순서 [재귀] (0) | 2021.08.16 |
백준 10870번 자바 피보나치 수 5 [재귀] (0) | 2021.06.06 |
백준 10872번 자바 팩토리얼 [재귀] (0) | 2021.06.03 |
백준 1002번 자바 터렛 [기본수학2] (0) | 2021.05.20 |
댓글