2447 별 찍기 - 10

LJM·2023년 7월 5일
0

백준풀기

목록 보기
158/259

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

9진트리 구조이고 가운데는 출력 안하면되겠다 라고 생각까지 하였는데
노드 하나씩 출력하려니 어떻게 해야할지 감이 안 잡혔다.

0.0 위치의 노드를 출력하고 0.1 을 출력하는건 어떻게 해야하지?

출력을 이차원배열에 담아놨다가 해야하나? 근데 3^8 이면 용량이 무지 클텐데.. 근데 생각을 잘못한게 이차원배열의 자료형을 int라고 무의식적으로 잘못 생각하고 암산을 했음.. char인데

어쨋든 실제로 사용할 용량을 계산해보자
N의 최대값이 3^8 이다
3^8 = 6561
이차원이니까 6561^2 = 43046721
char 는 1byte 니께 = 43046721byte
1MB 는 100만byte 이다 따라서 100만으로 나눠보면
43MB 를 사용하게 된다 실제로 메모리는 47MB 밖에 사용안했다

암튼 잘못생각해서 용량을 잘못 계산하였고 한참 고민하다가 검색해서 풀이를 찾아보고
이차원배열로 해결하였길래 나도 내 나름대로 코드를 짜서 해결할수 있었다.
근데 재귀함수다보니 많이 헤맸다. 재귀함수는 머리에서 잘 그려지지 않는다 그래서 어렵다.

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));

        int N = Integer.parseInt(br.readLine());

        arr = new char[N][N];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                arr[i][j] = ' ';
            }
        }

        dfs(N, 0, 0);

        StringBuilder sb = new StringBuilder();

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

        System.out.println(sb.toString());
    }

    public static void dfs(int depth, int x, int y){

        if(depth == 1){
            arr[x][y] = '*';
            return;
        }

        int nx = x*3;
        int ny = y*3;

        for (int i = nx; i < nx+3; i++) {
            for (int j = ny; j < ny+3; j++) {
                if(i == nx+1 && j == ny+1)
                    continue;
                dfs(depth/3, i, j);
            }
        }

    }
}
profile
게임개발자 백엔드개발자

0개의 댓글

Powered by GraphCDN, the GraphQL CDN