PS/Baekjoon Online Judge

[백준 10997] 별 찍기 - 22 [C]

kimyoungrok 2021. 8. 7. 11:03

백준 - 10997


풀이

별을 아래의 그림처럼 노란색, 연두색, 하늘색, 분홍색으로 나누어 찍었다.

         
void mark_star(int p, int N){
    if (N == 1)
        arr[p][p] = arr[p+1][p] = arr[p+2][p] = '*'; // 노란색
    else {
        int row = 4*N-1, col = row-2;
        for (int i = p; i < p+col; i++)
            arr[p][i] = arr[p+row-1][i] = '*'; // 연두색
			
        for (int i = p+2; i < p+row-1; i++)
            arr[i][p] = arr[i][p+col-1] = '*'; // 하늘색
			
        arr[p+1][p] = arr[p+2][p+col-2] = '*'; // 분홍색
		
        mark_star(p+2, N-1);
    }
}

N ~ 2번째는 연두색, 하늘색, 분홍색 부분에 별을 찍고, 마지막에 N = 1일 때, 노란색 부분에 별을 찍었다.

백준 - 10997

2번째 줄에는 별을 찍고 개행을 해야 한다는 점을 유의하자.


소스코드

#include <stdio.h>
#include <memory.h>
char arr[399][397];
void mark_star(int p, int N){
    if (N == 1)
        arr[p][p] = arr[p+1][p] = arr[p+2][p] = '*';
    else {
        int row = 4*N-1, col = row-2;
        for (int i = p; i < p+col; i++)
            arr[p][i] = arr[p+row-1][i] = '*';
			
        for (int i = p+2; i < p+row-1; i++)
            arr[i][p] = arr[i][p+col-1] = '*';
			
        arr[p+1][p] = arr[p+2][p+col-2] = '*';
		
        mark_star(p+2, N-1);
    }
}
int main(){
    int N;
    scanf("%d", &N);
    if (N == 1) putchar('*');
    else {
        memset(arr, 32, sizeof(arr));
        mark_star(0, N);
		
        int row = 4*N-1, col = row-2;
        for (int i = 0; i < row; i++)
            if (i != 1){
                for (int j = 0; j < col; j++)
                    putchar(arr[i][j]);
                putchar(10);
            }else puts("*");	
    }
}

출처

 

10997번: 별 찍기 - 22

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

www.acmicpc.net

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 11399] ATM [C]  (0) 2021.08.07
[백준 13015] 별 찍기 - 23 [C]  (0) 2021.08.07
[백준 10996] 별 찍기 - 21 [C]  (0) 2021.08.07
[백준 10994] 별 찍기 - 19 [C]  (0) 2021.08.07
[백준 10995] 별 찍기 - 20 [C]  (0) 2021.08.06