[백준] 2448. 별 찍기 - 11 _ Java

jii0_0·2022년 9월 19일
1

Beakjoon Online Judge

목록 보기
16/22
post-thumbnail

별 찍기 - 11 (Gold IV)

문제 링크

문제 설명

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

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

출력

첫째 줄부터 N번째 줄까지 별을 출력한다.

문제 풀이

  • 이건 아주 불친절한 문제라고 생각했다 참내,,,, 그래도,, 이런 퀴즈같은 문제는 재밌으니까 계속 보게되긴 했다

  • 가운데가 빈 삼각형이 기본형이고 저 기본형이 될때까지 쪼개야겠다 라고 생각했다

  • 배열 크기는 N 입력받으면 char[N][2*N-1]

  • 삼각형의 꼭대기는 (0, N-1) 이고

  • 사이즈가 3이 될때 까지 3개로 쪼개서 재귀 돌리자 ! 라고 생각함

Solution

import java.util.Arrays;
import java.util.Scanner;

// 별 찍기 - 11
public class Main {
	static char[][] stars;

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();

		stars = new char[N][N * 2 - 1]; // 꼭대기 별이 (0,N-1)에 찍힘
		for (int i = 0; i < N; i++) {
			Arrays.fill(stars[i], ' '); // 공백으로 채움
		}
		
		star(0, N-1, N);
		
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < 2 * N - 1; j++) {
				sb.append(stars[i][j]);
			}
			sb.append('\n');
		}
		System.out.println(sb);
	}

	public static void star(int r, int c, int N) {
		if (N == 3) { // k=0인 가장 작은 삼각형일 때 별찍기
			stars[r][c] = '*';
			stars[r + 1][c - 1] = stars[r + 1][c + 1] = '*';
			stars[r + 2][c - 2] = stars[r + 2][c - 1] = stars[r + 2][c] = stars[r + 2][c + 1] = stars[r + 2][c + 2] = '*';
			return;
		} else { // 큰 삼각형 세개로 다시 쪼갬
			int cut = N / 2;
			star(r, c, cut); // 제일 위에 삼각형
			star(r + cut, c - cut, cut); // 아래 왼쪽 삼각형
			star(r + cut, c + cut, cut); // 아래 오른쪽 삼각형
		}
	}
}
profile
느려도 꾸준히

0개의 댓글