티스토리 뷰

https://www.acmicpc.net/problem/2448

 

2448번: 별 찍기 - 11

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

www.acmicpc.net

문제

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

코드

import java.io.*;
import java.util.Arrays;

public class Main {
    private static char[][] board;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int rows = Integer.parseInt(br.readLine());
        board = new char[rows][rows * 2];

        Arrays.stream(board).forEach(i -> Arrays.fill(i, ' '));

        for (int i = 0; i < board.length; i++) board[i][board[i].length - 1] = '\n';

        makeBoard(0, rows - 1, rows);

        Arrays.stream(board).forEach(i -> {try{bw.write(i);} catch (IOException e) {}});
        bw.flush();
    }

    private static void makeBoard(int x, int y, int n) {
        if (n == 3) {
            board[x][y] = '*';
            board[x + 1][y - 1] = board[x + 1][y + 1] = '*';
            board[x + 2][y - 2] = board[x + 2][y - 1] = board[x + 2][y] = board[x + 2][y + 1] = board[x + 2][y + 2] = '*';
            return;
        }
        makeBoard(x, y, n / 2);
        makeBoard(x + n / 2, y - n / 2, n / 2);
        makeBoard(x + n / 2, y + n / 2, n / 2);
    }
}

풀이

 char로 2차원 배열 하나를 두고 공백으로 초기화 한다. 한 줄마다 맨끝(맨 오른쪽)은 개행 문자를 넣어 둔다. makeBoard 함수에서 * 이 들어갈 자리마다 넣어주고 최종적으로 배열을 출력하면 된다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함