<문제>
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.
크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.
***
* *
***
N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.
[입력]
첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.
[출력]
첫째 줄부터 N번째 줄까지 별을 출력한다.
<풀이과정>
^정답률이 51%나 되는데 처음부터 어떻게 풀어야할지 감이 오지 않아 인터넷 검색을 하여 참고하였다.^
입력 가능 최소값 3을 기준으로 다음과 같은 그림의 결과가 나온다.
* | * | * |
* | * | |
* | * | * |
그림을 9등분하여 볼 때, (1,1) 위치에 있는 칸이 빈칸임을 알 수 있다.
이를 이용하여 27을 입력했을 때의 출력 값에도 적용한다.
위 그림도 9등분하여 볼때 (1,1) 위치에 있는 칸이 빈칸임을 알 수 있다.
9등분한 하나의 부분을 확대해서 보면 다음과 같다.
위 그림도 9등분하여 보면, (1,1) 위치에 있는 칸이 빈칸이다.
이를 배열로 바꿔 [1][1]에만 빈칸이 되도록 만들어주면 된다. 그리고 나눌 수 없을 때까지 나눠 *을 입력해주면 된다.
<오류와 해결>
처음에는 36 - star(n, x + i * n, y + j * n); 이 아닌 star(n, i * n, j * n);을 사용하였더니 결과가 다르게 나왔다.
star(n, i * n, j * n);를 사용할 경우,
만약 n=1,x=3, y=0이고 i = 1, j=0일 때, star(1, 4, 0)이 호출되어야 하는데 star(1,1,0)이 호출되어
***
* *
***
만 출력되는 오류가 발생한다.
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
39
40
41
42
43
|
import java.util.Scanner;
public class Main {
private static char star[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
star = new char[num][num];
star(num, 0, 0);
for(int i = 0; i < num; i++) {
for(int j = 0; j < num; j++) {
System.out.print(star[i][j]);
}
System.out.println();
}
}
public static void star(int n, int x, int y) {
if(n == 1) {
star[x][y] = '*';
return;
}
n /= 3;
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
if(i == 1 && j == 1) {
star[i][j] = ' ';
}else {
star(n, x + i * n, y + j * n);
}
}
}
}
}
|
cs |
<참고자료>
티스토리, "[백준]2447번: 별찍기-10", https://gaebal-goebal.tistory.com/37
'성장 일기 > 알고리즘' 카테고리의 다른 글
[QUEUE(큐)] 백준 자바(java) #2164 카드2 (0) | 2021.04.05 |
---|---|
[JAVA] Stack(스택) (0) | 2021.04.04 |
[재귀] 백준 JAVA(자바) #11729 하노이 탑 이동 순서 (0) | 2021.03.25 |
[JAVA]재귀(Recursion) (0) | 2021.03.25 |
[2020 카카오 인턴] 보석 쇼핑(JAVA) (0) | 2021.02.02 |