21.08.09 기록

1 분 소요

백준 알고리즘 2447 풀이

🎆나의 오답

-2차원 boolean 배열을 사용하여 N이 1이되었을 때 false값은 공백을, true 값은 *을 출력했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class B2447 {
    public static StringBuilder sb = new StringBuilder();
    public static boolean[][] star;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        star = new boolean[N][N];

        getPattern(N);
    }

    public static int getPattern(int N) {
        if(N == 1) {
            printStar();
            return 0;
        }

        for(int i = 0; i < N; i++) {
            for(int j = 0; j < N; j++) {
                star[i][j] = true;
            }
        }
        for(int i = 0; i < (N/3); i++) {
            for(int j = 0; j < N; j++) {
                star[i][j] = true;
            }
        }

        for(int i = (N/3); i < (2*N/3); i++) {
            for(int j = 0; j < N/3; j++) {
                star[i][j] = true;
            }
            for(int j = (N/3); j < (2*N/3); j++) {
                star[i][j] = false;
            }
            for(int j = (2*N/3); j < N; j++) {
                star[i][j] = true;
            }
        }

        for(int i = (2*N/3); i < N; i++) {
            for(int j = 0; j < N; j++) {
                star[i][j] = true;
            }
        }

        return getPattern(N/3);
    }

    public static void printStar() {
        for(int i = 0; i < star.length; i++) {
            for(int j = 0; j < star.length; j++) {
                if(star[i][j]) { sb.append("*"); }
                else { sb.append(" "); }
            }
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

-아래 사진처럼 출력하고 결국 막혀서 해설을 보았다.


🎆해설(메모리 48.1MB, 시간 356ms로 통과)

-예시를 들어 코드를 따라가는 것보다 이번 문제는 규칙을 이해하고 코드를 이해하는 게 더 빨랐다.
-다시 풀어도 풀 수 있을진 모르겠지만.. 다음에 한 번 더 풀어봐야겠다!

  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;

  public class B2447 {
      public static char[][] star;

      public static void main(String[] args) throws IOException {
          BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          int N = Integer.parseInt(br.readLine());
          star = new char[N][N];

          getPattern(0, 0, N, false);

          StringBuilder sb = new StringBuilder();
          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);
      }

      public static void getPattern(int x, int y, int N, boolean space) {

          //공백칸인 경우
          if(space) {
              for(int i = x; i < (x+N); i++) {
                  for(int j = y; j < (y+N); j++) {
                      star[i][j] = ' ';
                  }
              }
              return;
          }

          if(N == 1) {
              star[x][y] = '*';
              return;
          }

          int size = (N / 3); //한 블록의 크기
          int count = 0;
          for(int i = x; i < (x+N); i+=size) {
              for(int j = y; j < (y+N); j+=size) {
                  count++;
                  if(count == 5) { getPattern(i, j, size, true); }
                  else { getPattern(i, j, size, false); }
              }
          }
      }
  }

카테고리:

업데이트: