곽로그

[백준 2448] 별찍기-11 (시간초과) 본문

알고리즘/백준

[백준 2448] 별찍기-11 (시간초과)

일도이동 2019. 4. 24. 14:25
반응형

 

 

2448번: 별 찍기 - 11

첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (k ≤ 10)

www.acmicpc.net

접근법

재귀로 풀어야 한다는 건 알았지만 재귀함수에 어떻게 인자를 넘겨야할지를 모르겠어서 구글링해봤더니 아주 친절하게 알려주시는 유투브를 발견했다. 

 

 

 이 분의 설명을 바탕으로 짠 코드는 아래와 같은데 문제는 시간초과가 난다는 거다. 

import java.util.Scanner;
public class Main {
	public static char starArray[][]=new char[3072][6143];
	public static void drawStar(int size, int x, int y) {
		if(size==3) {
			//별을 그린다
			starArray[y][x]='*';
			starArray[y+1][x-1]='*';
			starArray[y+1][x+1]='*';
			starArray[y+2][x-2]='*';
			starArray[y+2][x-1]='*';
			starArray[y+2][x]='*';
			starArray[y+2][x+1]='*';
			starArray[y+2][x+2]='*';
			
			return;
			
		}
		else {
			drawStar(size/2,x,y);
			drawStar(size/2,x-(size/2),y+size/2);
			drawStar(size/2,x+(size/2),y+size/2);
		}
	}
	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		StringBuilder str=new StringBuilder();
		int n=in.nextInt();
		drawStar(n,n-1,0);
		
		for(int i=0;i<n;i++) {
			for(int j=0;j<2*n-1;j++) {
				System.out.print(starArray[i][j]);
			}

			System.out.println();
		}
		
		
	}

}

  

 시간초과 문제를 해결하려면 출력문에서 StringBuilder를 사용하거나 동적프로그래밍을 하면 된다고하는데 아직 거기까지는 모르니 일단 keep

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 2292] 벌집  (0) 2019.04.25
[백준 10039] 평균점수  (0) 2019.04.25
[백준 8958] OX퀴즈  (0) 2019.04.24
[백준 2577] 숫자의 개수  (0) 2019.04.22
[백준 1065] 한수  (0) 2019.04.19
Comments