baekjoon
백준 2448번 : 별 찍기 - 11 자바
Meluu_
2024. 9. 13. 21:02
🧫 문제 분석
✔️ 출처
📖 문제


재귀로 풀어야 될거 같은 패턴 모양이다
삼각형을 3개로 나눠서 위쪽, 아래왼쪽, 아래 오른쪽 으로 분할한다.
높이는 N 이고
밑변은 N * 2 - 1 이다.
n 이 3일 때까지 재귀로 삼각형을 분할하고
3이되면 위치에 맞게 별을 넣으면 된다.
아래의 그림을 참조하면 될 것 같다.

이 방식으로 삼각형을 분할한다.
처음 시도때 실수 한 것이 삼각형의 위쪽 별 위치를 재귀로 넘겨서 분할할려 했는데
인덱스 벗어나거나 하는 문제가 발생했다.
🔅 문제 풀이
import java.io.*;
import java.util.*;
public class Main {
static char[][] arr;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
arr = new char[n][n + n - 1];
for (int i = 0; i < n; i++) {
Arrays.fill(arr[i], ' ');
}
recursion(0, 0, n);
for (char[] stars : arr) {
sb.append(stars).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
private static void recursion(int r, int c, int div) {
if (div == 3) {
arr[r][c + 2] = '*';
arr[r + 1][c + 1] = arr[r + 1][c + 3] = arr[r + 2][c] = arr[r + 2][c + 1] = arr[r + 2][c + 2] = arr[r + 2][c + 3] = arr[r + 2][c + 4] = '*';
}else {
int mid = div / 2 ;
// 위쪽 삼각형
recursion(r, c + mid, mid);
// 왼쪽 아래 삼각형
recursion(r + mid, c, mid);
// 오른쪽 아래 삼각형
recursion(r + mid , c + div , mid);
}
}
}
❗ 오답노트 / 필요한 지식
- 어떻게 나누고, 어떻게 처리할지 잘 생각해보자.