[백준/Java] 2447 - 별 찍기 - 10

2025. 10. 6. 12:19·코딩테스트/백준

https://www.acmicpc.net/problem/2447

문제


풀이

주어진 크기 N에 대해 재귀적인 규칙에 따라 가운데가 비어있는 패턴을 그리는 문제이다

 

`drawStar(x좌표, y좌표, size)` 재귀 함수를 정의해보자. (x, y)를 왼쪽 위 꼭짓점으로 하는 size * size 크기의 정사각형에 패턴을 그리는 역할을 한다

기저 조건: 만약 size가 1이면 더 이상 쪼갤 수 없으므로 (x, y)에 별을 찍고 return

재귀 단계

  • 현재 size * size 정사각형을 3 * 3 그리드로 나눈다. 나눈 정사각형의 크기는 `size / 3` 이다
  • 3 * 3 그리드의 9칸을 순회
  • 가운데 칸(i=1, j=1)은 건너뛴다. (공백 처리)
  • 나머지 8칸에서는 새로운 시작 좌표와 newSize를 인자로 넘겨 재귀 함수를 호출
    • `drawStar(x + i * newSize, y + j * newSize, newSize)`

N = 9 인 경우를 그림으로 보면 다음과 같다

결과를 저장할 `char[][] `배열을 `' '`(공백)으로 초기화 시키고 시작하면 `*` 찍는 것에만 집중하면 된다

 

자세한 것은 코드를 보자

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

	static int N, K;
	static char[][] star;

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();

		N = Integer.parseInt(br.readLine());
		star = new char[N][N];

		// 공백으로 초기화
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				star[i][j] = ' ';
			}
		}

		drawStar(0, 0, N);

		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				sb.append(star[i][j]);
			}
			sb.append("\n");
		}

		System.out.println(sb);

		br.close();
	}


	static void drawStar(int r, int c, int size) {
		// 기저 조건
		if (size == 1) {
			star[r][c] = '*';
			return;
		}

		// size * size 정사각형을 3 * 3 그리드로 나눔
		int newSize = size / 3;
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				if (i == 1 && j == 1) continue; // 가운데 칸 공백 처리
				// 새로운 좌표에서 재귀 호출
				drawStar(r + i * newSize, c + j * newSize, newSize);
			}
		}
	}
}

결과

'코딩테스트/백준' 카테고리의 다른 글
  • [백준/Java] 9465 - 스티커
  • [백준/Java] 9663 - N-Queen
  • [백준/Java] 1261 - 알고스팟
  • [백준/Java] 13913 - 숨바꼭질 4
KDH.dev
KDH.dev
  • KDH.dev
    CodingHard
    KDH.dev
  • 전체
    오늘
    어제
    • 전체글 (82)
      • 코딩테스트 (74)
        • 프로그래머스 (13)
        • 백준 (61)
      • CS (4)
        • 네트워크 (4)
      • Spring (1)
      • Java (3)
        • 자료구조 (3)
        • 알고리즘 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CS
    13913
    17626
    21736
    14940
    16935
    프로그래머스 Lv.0
    18111
    프로그래머스
    자바
    자료구조
    네트워크
    11660
    백준
    [LG유플러스] 유레카 백엔드 개발자
    코딩테스트
    부트캠프후기
    5525
    30804
    멀티캠퍼스it부트캠프
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
KDH.dev
[백준/Java] 2447 - 별 찍기 - 10
상단으로

티스토리툴바