728x90
풀이
출력 할 삼각형의 맨 위의 좌표(빨간 원)를 (0, N-1)이라고 하자.
이진트리 처럼 좌측 하단 삼각형의 맨 위 좌표(왼쪽 초록 원)는 (0 + N/2, N-1 - N/2), 우측 하단 삼각형의 맨 위 좌표(오른쪽 초록 원)는 (0 + N/2, N-1 + N/2)이다.
분할정복을 시행할 때마다, 입력받은 크기를 2로 나누어 건네주며, 전달받은 크기가 3이 될 때 배열에 빨간원 - 좌측 초록원 - 우측 초록원 이 순서대로 가장 작은 삼각형 내부에 별을 채워 넣는 것이다.
출력형식에 약간의 장난(?)이 숨어있다.
예제 출력을 드래그 해보니, 각 행의 마지막 별을 찍고 개행이 아니라, 공백을 출력해줘야 한다.
memset()를 사용해 배열을 빠르게 초기화하고, 별을 채워 넣자.
소스코드
#include <stdio.h>
#include <memory.h>
char arr[3072][6144];
void mark_star(int row, int col, int N){
if (N == 3){
arr[row][col] = '*';
arr[row+1][col-1] = '*';
arr[row+1][col+1] = '*';
arr[row+2][col-2] = '*';
arr[row+2][col-1] = '*';
arr[row+2][col] = '*';
arr[row+2][col+1] = '*';
arr[row+2][col+2] = '*';
}else {
mark_star(row, col, N/2);
mark_star(row + N/2, col - N/2, N/2);
mark_star(row + N/2, col + N/2, N/2);
}
}
int main(){
int N;
scanf("%d", &N);
memset(arr, ' ', sizeof(arr));
mark_star(0, N-1, N);
for (int i = 0; i < N; i++){
for (int j = 0; j < 2*N; j++)
putchar(arr[i][j]);
putchar(10);
}
}
출처 및 참고자료
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 1712] 손익분기점 [C] (0) | 2021.07.23 |
---|---|
[백준 2522] 별 찍기 - 12 [C] (0) | 2021.07.23 |
[백준 2447] 별 찍기 - 10 [C] (0) | 2021.07.23 |
[백준 2446] 별 찍기 - 9 [C] (0) | 2021.07.22 |
[백준 2445] 별 찍기 - 8 [C] (0) | 2021.07.22 |