알고리즘/백준 문제풀이

백준 [java 자바] 2447번 : 별찍기-10

잔디🌿 2022. 8. 12. 22:04

 이 문제는 예전에도 도전해 본 적이 있는데 그때는 이걸 어떻게 푸나 하고 넘어갔지만 지금은 풀 수 있어서 기분이 좋았다. 확실히 꾸준히 하니 실력이 느는 것 같다. 이제까지는 실버 1문 제 만 풀었는데 이제 골드 5로 넘어가고자 한다. 빨리 골드로 승급하고 싶다!

n은 3의 x제곱이고 x만큼 저 패턴을 반복한다고 보면 된다.

import java.util.*;
import java.io.*;


class Main{
	
 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());
    int cnt = 0;
    int nn = n;
    while(nn != 1) {
    	nn/=3;
    	cnt ++;
    }
    
    char[][] arr = new char[n+1][n+1];

    
    arr[1][1] = '*';
    
    int i,j;
    int k;
    
    for(i= 0;i<cnt;i++) {
    	for(j =1 ;j<=Math.pow(3, i);j++) {
    		
    		for(k = 1;k<=Math.pow(3, i);k++) {
    			
    			arr[(int) (j +Math.pow(3, i))][k] = arr[j][k] ;
    			arr[(int) (j +2*Math.pow(3, i))][k] = arr[j][k] ;
    			arr[j][(int) (k+Math.pow(3, i))] = arr[j][k] ;
    			arr[j][(int) (k+(Math.pow(3, i)*2))] = arr[j][k] ;
    			arr[(int) (j +Math.pow(3, i))][(int) (k+Math.pow(3, i)*2)] = arr[j][k] ;
    			arr[(int) (j +Math.pow(3, i)*2)][(int) (k+Math.pow(3, i))] = arr[j][k] ;
    			arr[(int) (j +Math.pow(3, i)*2)][(int) (k+Math.pow(3, i)*2)] = arr[j][k] ;
    		}
    	}
    }
    
    for(i = 1;i<=n;i++) {
    	for(j = 1;j<=n;j++) {
    		if(arr[i][j] == '*') {
    		sb.append('*');}
    		else {
    			sb.append(' ');;
    		}
    	}
    	sb.append('\n');
    }
    System.out.println(sb);
   
    	
    }
 }

i = 0부터 n-1까지 돌도록 했고 각 회마다 같은 블럭이 들어가야 하는 8군데를 채우도록 했다. 그리고 그냥 System... 이걸 이용해서 출력하면 시간 초과가 나서 stringBuilder을 이용하여 출력하였다.

 처음 이 코드를 완성하고 출력했을 때 너무 아름다웠다. 기분이 좋은 문제같다(맞았을때만...)

알아야 할 점:
이렇게 출력할 것이 많은 것은 stringBuilder을 사용하도록 하기

 

다른 사람의 코드와 다른 점: 

1. 빈칸의 i, j는 모두 0이 될 때까지 3으로 나누면 둘 다 나머지가 1인 배열이 빈칸이다.

2. 재귀 함수를 사용한다.

[백준] 2447번 : 별 찍기 - 10 with java – JOOS (joosjuliet.github.io)

 

[백준] 2447번 : 별 찍기 - 10 with java

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

joosjuliet.github.io

여기 참고! 찾아보니 내가 제일 복잡하게 푼 것 같다