본문 바로가기
문제 풀이/백준

[JAVA58] 2447. 별 찍기 - 10

by hyeminigo 2024. 10. 20.

2447. 별 찍기-10 (G5)

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1 초 256 MB 78828 44240 33018 55.939 %

 

문제

재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다.

크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 하나씩 있는 패턴이다.

***
* *
***

 

 

N이 3보다 클 경우, 크기 N의 패턴은 공백으로 채워진 가운데의 (N/3)×(N/3) 정사각형을 크기 N/3의 패턴으로 둘러싼 형태이다. 예를 들어 크기 27의 패턴은 예제 출력 1과 같다.

입력

 

첫째 줄에 N이 주어진다. N은 3의 거듭제곱이다. 즉 어떤 정수 k에 대해 N=3k이며, 이때 1 ≤ k < 8이다.

출력

첫째 줄부터 N번째 줄까지 별을 출력한다.

 

 


summary

조건에 맞춰서 별찍기

 

strategy

재귀 활용

  • 별찍기 재귀함수 인자로 시작 좌표와 한변 사이즈를 넘겨줌 (int x, int y, int size)
  • 행과 열을 3분할로 나눔 (이중for문)
  • 행과 열이 1일 때는 공백인 구역으로 패스 (continue)
  • 한변 사이즈가 1 이면 종료 조건으로 '*' 찍는 영역 (board[x][y] = true;)

note

  • N은 3의 거듭제곱
  • 1 ≤ k < 8
import java.util.*;
import java.io.*;

public class Main {
    static int N;
    static boolean[][] board;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder answer = new StringBuilder();

        // input
        N = Integer.parseInt(br.readLine()); // 3, 9, 27, ...
        board = new boolean[N + 1][N + 1];

        // logic
        star(0, 0, N);

        // output
        for(int i = 0; i < N; i++) {
            for(int j = 0; j < N; j++) {
                char c = '*';
                if(!board[i][j]) c = ' ';
                answer.append(c);
            }
            answer.append("\n");
        }

        System.out.println(answer);
    }

    private static void star(int x, int y, int size) { // 분할정복 (시작 좌표와 크기)
        if(size == 1) {
            board[x][y] = true;
            return;
        }

        for(int i = 0; i < 3; i++) { // 3 X 3 영역으로 나눔
            for(int j = 0; j < 3; j++) {
                if(i == 1 && j == 1) continue; // 가운데는 비움

                star(x + (size/3 * i), y + (size/3 * j) ,size/3); // 각 영역 시작 좌표와 크기
            }
        }
    }
}

 

문제 결과 메모리 시간 언어코드 길이
2447 맞았습니다!! 42700 KB 264 ms  Java 11 / 수정 1270 B

memo

  • 재귀 활용하는 방법이 안떠올라서 다른분 풀이 학습. 연습이 필요한거 같다
 

[백준] 2447번 - 별 찍기 - 10

2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외

stonage.tistory.com

 

'문제 풀이 > 백준' 카테고리의 다른 글

[JAVA60] 4673. 셀프넘버  (0) 2024.10.22
[JAVA59] 2108. 통계학  (0) 2024.10.21
[JAVA57] 1966. 프린터 큐  (0) 2024.10.19
[JAVA56] 1065. 한수  (0) 2024.10.18
[JAVA56] 1940. 주몽  (0) 2024.10.17