신규 블로그를 만들었습니다!

2020년 이후부터는 아래 블로그에서 활동합니다.

댓글로 질문 주셔도 확인하기 어려울 수 있습니다.

>> https://bluemiv.tistory.com/

 

※ 문제 풀이 코드는 맨 아래에 있습니다.

 

문제

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

 

입력

첫째 줄에 N이 주어진다. N은 항상 3*2^k 수이다. (3, 6, 12, 24, 48, ...) (k<=10)

 

출력

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

 

예제입력

24

 

예제출력

                       *                        
                      * *                       
                     *****                      
                    *     *                     
                   * *   * *                    
                  ***** *****                   
                 *           *                  
                * *         * *                 
               *****       *****                
              *     *     *     *               
             * *   * *   * *   * *              
            ***** ***** ***** *****             
           *                       *            
          * *                     * *           
         *****                   *****          
        *     *                 *     *         
       * *   * *               * *   * *        
      ***** *****             ***** *****       
     *           *           *           *      
    * *         * *         * *         * *     
   *****       *****       *****       *****    
  *     *     *     *     *     *     *     *   
 * *   * *   * *   * *   * *   * *   * *   * *  
***** ***** ***** ***** ***** ***** ***** *****

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Ex2448 {

    private static char[][] map;
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        try {
            int n = Integer.parseInt(br.readLine());
            map= new char[n][2*n-1];
            initMap(n);
            
            drawStar(0, n-1, n);
            int i;
            for(i=0; i<n; i++) {
                bw.write(map[i]);
                bw.write('\n');
            }
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    // 별 그리기
    private static void drawStar(int x, int y, int n) {
        if(n == 3) {
            map[x][y] = '*';
            map[x+1][y-1] = map[x+1][y+1] = '*';
            map[x+2][y-2] = map[x+2][y-1] = map[x+2][y] = map[x+2][y+1] = map[x+2][y+2] = '*';
            return;
        }
        
        // 윗 삼각형
        drawStar(x, y, n/2);
        // 아래 왼쪽 삼각형
        drawStar(x + n/2, y - n/2, n/2);
        // 아래 오른쪽 삼각형
        drawStar(x + n/2, y + n/2, n/2);
    }
    
    // 초기화
    private static void initMap(int n) {
        int i,j;
        for(i=0; i<n; i++) {
            for(j=0; j<2*n-1; j++) {
                map[i][j] = ' ';
            }    
        }
    }
    
}​

 

결과

 

 직접 문제 풀고 돌려본 뒤, 채점까지 마친 후에 작성한 글입니다.

더 좋은 방법이 있다면, 댓글로 알려주시면 감사하겠습니다 :)

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기