728x90
문제
접근 방식
별 찍기 문제들은 재귀 처음 배울 때 너무 싫어했던 기억이 있어서
풀기 싫었는데 스트릭 유지할겸 오랜만에 재귀 문제를 풀어보았다.
정사각형이 점점 작아지는 형태로
예를 들면 가장 밖의 정사각형이 13 * 13이라면
그 안의 사각형은 상하좌우 한 칸 거리를 두고 9 * 9
그 안의 사각형도 상하좌우 한 칸 거리를 두고 5 * 5
마지막은 1 * 1이 된다.
규칙을 찾아보면 사각형의 가로세로 길이가 4씩 줄어드는 것을 알 수 있는데
재귀를 호출할 때마다 x축과 y축을 4씩 늘리거나 줄여주면서
2차원 문자 배열에 별을 저장한 후에 모두 끝나면 배열을 출력해주면 된다.
풀이
public class Main {
private static char[][] stars;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
stars = new char[1 + (n - 1) * 4][1 + (n - 1) * 4];
star(0, 1 + (n - 1) * 4);
for (char[] star : stars) {
sb.append(star).append("\n");
}
System.out.println(sb);
}
private static void star(int x, int y) {
if (x >= y) return;
for (int i = x; i < y; i++) {
if (i == x || i == y - 1) {
for (int j = x; j < y; j++) stars[i][j] = '*';
} else {
stars[i][x] = '*';
for (int j = x + 1; j < y - 1; j++) stars[i][j] = ' ';
stars[i][y - 1] = '*';
}
}
star(x + 2, y - 2);
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 1904번 : 01타일 (0) | 2024.03.07 |
---|---|
[프로그래머스] 더 맵게 (0) | 2024.03.05 |
[백준] 9184번 : 신나는 함수 실행 (0) | 2024.02.23 |
[백준] 4779번 : 칸토어 집합 (0) | 2024.02.22 |
[백준] 24060번 : 알고리즘 수업 - 병합 정렬 1 (0) | 2024.02.20 |