본문 바로가기

알고리즘

백준 별찍기-2448

www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

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

www.acmicpc.net

이런 구조라고 생각하고 분할 정복 알고리즘을 사용하면 답은 풀린다. arraylist를 사용했는데 2차원 배열을 사용해도 풀릴것 같다.

package BAEKJOON;

import java.util.ArrayList;
import java.util.Scanner;

public class TriangleStar_2448 {
	
	static int n;
	
	public static String makeSpace(int n) {
		String r = "";
		for (int i = 0; i < n; i++) {
			r += " ";
		}
		return r;
	}
	
	public static ArrayList<String> makeStar(int k) {
		if (k == 3) {
			ArrayList<String> r = new ArrayList<String>();
			r.add("  *  ");
			r.add(" * * ");
			r.add("*****");
			return r;
		} else {
			ArrayList<String> r = new ArrayList<String>();
			ArrayList<String> rSub = makeStar(k / 2);
			for (int i = 0; i < rSub.size(); i++) {
				r.add(makeSpace(k / 2) + rSub.get(i) + makeSpace(k / 2));
			}
			for (int i = 0; i < rSub.size(); i++) {
				r.add(rSub.get(i) + " " + rSub.get(i));
			}
			return r;
		}
	}

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		sc.close();
		ArrayList<String> r = makeStar(n); 
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < r.size(); i++) {
			sb.append(r.get(i) + "\n");
		}
		System.out.println(sb.toString());
		// Stringbuilder 말고 String 으로 + 연산 해주면 통과 못한다...
	}

}

 

'알고리즘' 카테고리의 다른 글

백준 토마토-7576  (0) 2020.11.08
백준 Z-1074  (0) 2020.11.08
백준 설탕 배달-2839  (0) 2020.11.08
백준 별 찍기10-2447  (0) 2020.11.08
백준 쿼드트리-1992  (0) 2020.11.08