반응형
🅰 백준 2447. 별찍기 10
2447번: 별 찍기 - 10
재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이
www.acmicpc.net
✏️ 문제 풀이
- N크기만큼 2차원 배열을 생성하여 재귀 규칙에 따라 데이터를 넣은 후 출력을 해주었다.
- 규칙을 보면 다섯번째 순서일 때 공백칸을 출력하므로 count와 boolean형 check변수를 이용하여 가운데 빈 부분을 체크해주었다.
- 재귀 수행 후 기저조건으로는 check = true일 때(" "), N==1일때(*)를 지정해주었다.
✏️ 소스코드
package divideandconquer;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class Main_실버1_2447_별찍기10 {
private static StringBuilder sb = new StringBuilder();
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
private static char map[][];
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
map = new char[N][N];
star(N, 0, 0, false);
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
bw.append(map[i][j]);
}
bw.append('\n');
}
bw.flush();
bw.close();
}
private static void star(int N, int x, int y, boolean check) throws IOException {
if (check) {
for (int i = x; i < x + N; i++) {
for (int j = y; j < y + N; j++) {
map[i][j] = ' ';
}
}
return;
}
if (N == 1) {
map[x][y] = '*';
return;
}
int count = 0;
int size = N/3;
for (int i = x; i < x + N; i += N / 3) {
for (int j = y; j < y + N; j += N / 3) {
count++;
if (count == 5) {
star(size,i,j,true);
}else {
star(size,i,j,false);
}
}
}
}
}
✅ 후기
- 간단한 재귀만 풀다가 심화적인 부분을 들어가니 실버라도 쉽지가 않았다. 재귀로 생각하는 힘을 길러야겠다.
반응형
'백준 > 분할정복' 카테고리의 다른 글
백준 11729. 하노이탑 (0) | 2021.09.06 |
---|---|
백준 1780. 종이의 개수 (0) | 2021.09.06 |
백준 2448. 별찍기 11 (0) | 2021.09.06 |
백준 11728. 배열합치기 (0) | 2021.09.06 |
백준 10816. 숫자카드2 (0) | 2021.09.06 |
댓글