-
[java] 백준 알고리즘 2448번 별찍기-11 풀이알고리즘/백준 알고리즘 2018. 6. 25. 09:38
별들의 규칙을 보면
별이 그려진 현재 높이의 반을 했을 때 별 패턴과 현재 높이의 바닥쪽 별의 패턴이 비슷하다.
높이의 반을 했을 때 별의 패턴을 2배로 하면 현재 높이의 바닥쪽 별 패턴이 같다.
입력되는 수는 바닥의 라인까지라고 보면 된다.
높이의 반을 넘어가는 순간부터는 첫줄부터 높이의 반만큼의 2배 패턴과 같다.
패턴을 그려주면서 이미 그려진 패턴들은 라인수가 아래로 내려가는 만큼
기존의 패턴을 오른쪽으로 밀어주어야 한다.
구현한 소스는 아래와 같다.
* 풀이 소스
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849public class Baekjoon2448 {public static void main(String[] args) throws NumberFormatException, IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int N = Integer.parseInt(br.readLine());printStar(N);}public static void printStar(int n) throws IOException{BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));String[] starArray = new String[n+1];starArray[1] = " * ";starArray[2] = " * * ";starArray[3] = "*****";for(int i=1; 3*Math.pow(2, i)<=n; i++){int bottom = (int) (3*Math.pow(2, i));int middle = bottom/2;for(int j=middle+1; j<=bottom; j++){starArray[j] = starArray[j-middle] + " " + starArray[j-middle];}String pushSpace = "";for(int k=1; k<=middle; k++){pushSpace += " ";}for(int l=1; l<=middle; l++){starArray[l] = pushSpace + starArray[l] + pushSpace;}}for(int i=1; i<starArray.length; i++){bw.write(starArray[i]);bw.newLine();}bw.flush();}}cs '알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[java] 백준 알고리즘 2751번 수 정렬하기2 풀이 (0) 2018.06.26 [java] 백준 알고리즘 1966번 프린터 큐 풀이 (0) 2018.06.25 [java] 백준 알고리즘 2581번 소수 풀이 (0) 2018.06.14 [java] 백준 알고리즘 1978번 소수 찾기 풀이 (0) 2018.06.14 [java] 백준 알고리즘 2750번 수 정렬하기 풀이 (0) 2018.06.14