본문 바로가기
백준/분할정복

백준 2448. 별찍기 11

by 29살아저씨 2021. 9. 6.
반응형

🅰 백준 2448. 별찍기 11

 

2448번: 별 찍기 - 11

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

www.acmicpc.net

✏️ 문제 풀이

  • 재귀를 이용하여 삼각형을 3등분을 한 다음 같은 모양의 삼각형을 찍어주었다.
  • 일단 삼각형을 프린트 할 수 있는 함수를 하나 생성하고, 재귀함수를 생성해주었다.
  • 재귀함수 내에서는 N==3(삼각형 높이가 3)이 될때까지 재귀를 돌린 후 프린트함수를 통해 배열에 저장을 해주었다.
  • 시작 꼭지점을 기준으로 삼각형을 3등분 해주었다. 
  • star(N / 2, x, y);                            //중심
    star(N / 2, x + N / 2, y + N / 2);      //좌
    star(N / 2, x + N / 2, y - N / 2);       //우

✏️ 소스코드

package divideandconquer;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class Main_골드4_2448_별찍기11 {
	private static StringBuilder sb = new StringBuilder();
	private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
	private static char map[][];

	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		map = new char[N][N * 2 - 1];
		
		//출력할 때 null문자가 아닌 ' '공백이 들어가서 출력을 해야 답이 맞다고 한다.
		for (int j = 0; j < N; j++) {
			for (int i = 0; i < N * 2 - 1; i++) {
				map[j][i] = ' ';
			}
		}
		
		star(N, 0, N);
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N * 2 - 1; j++) {
				bw.append(map[i][j]);
			}
			bw.append('\n');
		}
		bw.flush();
		bw.close();

	}

	//재귀 구현
	private static void star(int N, int x, int y) {

		if (N == 3) {
			print(x, y);
			return;
		}

		star(N / 2, x, y);
		star(N / 2, x + N / 2, y + N / 2);
		star(N / 2, x + N / 2, y - N / 2);
	}

	private static void print(int x, int y) {
		map[x][y - 1] = '*';
		map[x + 1][y - 2] = '*';
		map[x + 1][y] = '*';
		for (int i = -3; i < 2; i++) {
			map[x + 2][y + i] = '*';
		}
	}
}

 

✅ 후기

  • 괜히 골드가 아니였다,, 규칙은 찾았으나 아직 재귀로 구현하는 부분이 부족한 것 같다. 더 공부해서 별찍기 마스터 해야겠다.
반응형

'백준 > 분할정복' 카테고리의 다른 글

백준 1780. 종이의 개수  (0) 2021.09.06
백준 2447. 별찍기 10  (0) 2021.09.06
백준 11728. 배열합치기  (0) 2021.09.06
백준 10816. 숫자카드2  (0) 2021.09.06
백준 1074. Z  (0) 2021.09.05

댓글