Algorithm/Baekjoon

[ Baekjoon] 2448번 - 별 찍기 - 11

또잉코딩 2021. 1. 25. 17:18
 

2448번: 별 찍기 - 11

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

www.acmicpc.net

 

풀이 방법

처음에 구현했을 때 로직은 맞았지만 시간초과가 떴다. 그 이유는 2중 for문으로 System.out.print()로 배열을 여러번에 걸쳐서 출력을 했기 때문이다. 그래서 한번에 출력하도록 하기 위해서 StringBuilder를 이용했다. 

하지만 그 다음에는 틀렸습니다가 떴다. 그 이유는 백준에서는 null을 읽으면 발생한다고 한다. 그래서 char 2차원 배열을 ' ' 빈 공백으로 초기화 해주었다.

 

구현 코드

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

public class Q_2448 {
	static char[][] array;
	static StringBuilder sb;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		
		int N = Integer.parseInt(br.readLine());
		array = new char[N][N/3*6-1];
		// 배열 초기화
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N/3*6-1; j++) {
				array[i][j] = ' ';
			}
		}
		
		int j_start = ((N/3)*6-1)/2; // 시작점
		DrawStars(0, N-1, j_start);
		
		// 출력
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N/3*6-1; j++) {
				sb.append(array[i][j]);
			}
			sb.append("\n");
		}
		System.out.print(sb);
	}
	
	public static void DrawStars(int i_start, int i_end, int j) { // j는 삼각형 그리는 시작 위치
		if (i_end - i_start == 2) { // 삼각형 그리기
			array[i_start][j] = '*';
			array[i_start+1][j-1] = '*';
			array[i_start+1][j+1] = '*';
			array[i_start+2][j-2] = '*';
			array[i_start+2][j-1] = '*';
			array[i_start+2][j] = '*';
			array[i_start+2][j+1] = '*';
			array[i_start+2][j+2] = '*';
			return;
		} else if (i_start < i_end) { // 3등분 나누기
			int i_length = (i_end - i_start) / 2;
			int j_length = (i_end - i_start +1) / 2;
			
			DrawStars(i_start, i_start + i_length, j);
			DrawStars(i_start + i_length + 1, i_end, j-j_length);
			DrawStars(i_start + i_length + 1, i_end, j+j_length);
		}
	}
}

'Algorithm > Baekjoon' 카테고리의 다른 글

[ Baekjoon ] 1753번 - 최단경로  (0) 2021.02.04
[ Baekjoon ] 1780번 - 종이의 개수  (0) 2021.01.23
[ Baekjoon ] 1629번 - 곱셈  (0) 2021.01.23
[ Baekjoon ] 1992번 - 쿼드트리  (0) 2021.01.21
[ Baekjoon ] 1520번 - 내리막 길  (0) 2021.01.18