반응형
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 256 MB | 23016 | 9008 | 6308 | 37.301% |
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N이 주어진다. N은 항상 3×2k 수이다. (3, 6, 12, 24, 48, ...) (0 ≤ k ≤ 10, k는 정수)
출력
첫째 줄부터 N번째 줄까지 별을 출력한다.
예제 입력 1
24
예제 출력 1
*
* *
*****
* *
* * * *
***** *****
* *
* * * *
***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* *
* * * *
***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* * * *
* * * * * * * *
***** ***** ***** *****
* * * * * * * *
* * * * * * * * * * * * * * * *
***** ***** ***** ***** ***** ***** ***** *****
코드
import java.io.*;
import java.util.*;
public class p2448 {
static int N;
static char[][] map;
static BufferedReader br;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
map = new char[N][2 * N - 1];
for (int i = 0; i < N; ++i) {
for (int j = 0; j < 2 * N - 1; ++j) {
map[i][j] = ' '; // 공백문자로 초기화
}
}
printStar(0, N - 1, N);
for (int i = 0; i < N; ++i) {
for (int j = 0; j < 2 * N - 1; ++j) {
sb.append(map[i][j]);
}
sb.append("\n");
}
System.out.print(sb);
}
// 분할정복 알고리즘
static void printStar(int r, int c, int n) {
// 패턴의 가장 작은 단위인가?
if (n == 3) {
map[r][c] = '*';
map[r + 1][c - 1] = map[r + 1][c + 1] = '*';
map[r + 2][c - 2] = map[r + 2][c - 1] = map[r + 2][c] = map[r + 2][c + 1] = map[r + 2][c + 2] = '*';
return;
}
// 가장 작은 단위가 아니라면 더 작은 단위로 쪼개기
int len = n / 2;
// 그리고 그 단위의 가장 꼭대기 * 좌표로 재귀 호출
printStar(r, c, len);
printStar(r + len, c - len, len);
printStar(r + len, c + len, len);
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][1072 ] 게임 (0) | 2021.04.23 |
---|---|
[ BOJ ][JAVA][2503] 숫자 야구 (0) | 2021.04.22 |
[ BOJ ][JAVA][2447] 별 찍기 - 10 (0) | 2021.04.22 |
[ BOJ ][JAVA][2422] 한윤정이 이탈리아에 가서 아이스크림을 사먹는데 (0) | 2021.04.22 |
[ BOJ ][JAVA][2352] 반도체 설계 (0) | 2021.04.22 |