🧫 문제 분석
✔️ 출처
📖 문제


재귀로 풀어야 될거 같은 패턴 모양이다
삼각형을 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);
}
}
}
❗ 오답노트 / 필요한 지식
- 어떻게 나누고, 어떻게 처리할지 잘 생각해보자.
'baekjoon' 카테고리의 다른 글
백준 18870번 : 좌표 압축 [자바] (1) | 2025.03.02 |
---|---|
백준 1022번 : 소용돌이 예쁘게 출력하기 [자바] (1) | 2025.02.04 |
백준 12891번 : DNA 비밀번호 자바 (0) | 2024.09.13 |
백준 1094번 : 막대기 자바 (1) | 2024.09.07 |
백준 1030번 : 프렉탈 평면 자바 (3) | 2024.09.05 |