본문 바로가기
C/중간고사 대비 (2022 1학기)

[C백준] 시험에 무조건 나오는 별찍기 7번부터 11번 까지

by Meaning_ 2022. 4. 15.
728x90
반응형

 

별찍기 #7

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include<stdbool.h>
 
 
int main() {
 
 
    int n;
    scanf("%d"&n);
 
    for (int i = 1; i <= n - 1; i++) {
        for (int j = i; j <= n-1; j++) {
            printf(" ");
        }
        for (int j = 1; j <= i - 1; j++) {
            printf("*");
        }
        printf("*");
        for (int j = 1; j <= i - 1; j++) {
            printf("*");
        }
        printf("\n");
    }
 
 
    for (int i = 1; i <= 2 * n - 1; i++) {
        printf("*");
    }
    printf("\n");
 
 
    for (int i = 1; i <= n - 1; i++) {
        for (int j = 1; j <= i; j++) {
            printf(" ");
        }
        for (int j = 1; j <= n - 1 - i; j++) {
            printf("*");
        }
        printf("*");
        for (int j = 1; j <= n - 1 - i; j++) {
            printf("*");
        }
        printf("\n");
    }
 
}
 
cs

 

 

#별찍기 8 

얘도 나비 뭔가 같음

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include<stdbool.h>
 
 
int main() {
 
 
    int n;
    scanf("%d"&n);
 
    for (int i = 1; i <= n - 1; i++) {
        for (int j = 1; j <= i; j++) {
            printf("*");
        }
        for (int j = 1; j <= 2 * (n - i); j++) {
            printf(" ");
        }
        for (int j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
 
    for (int i = 1; i <= 2 * n; i++) {
        printf("*");
    }
    printf("\n");
 
 
    for (int i = 1; i <= n - 1; i++) {
        for (int j = n -i; j >= 1; j--) {
            printf("*");
        }
        for (int j = 1; j <= 2 * i; j++) {
            printf(" ");
        }
        for (int j = n - i; j >= 1; j--) {
            printf("*");
        }
        printf("\n");
    }
}
 
cs

 

 

#별찍기 9

모래시계 입니당

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include<stdbool.h>
 
 
int main() {
 
 
    int n;
    scanf("%d"&n);
 
    for (int i = 1; i <= n - 1; i++) {
 
        for (int j = 1; j <= i - 1; j++) {
            printf(" ");
        }
        for (int j = i; j <= n - 1; j++) {
            printf("*");
            
        }
        printf("*");
 
        for (int j = i; j <= n - 1; j++) {
            printf("*");
 
        }
        
        printf("\n");
    }
    for (int i = 1; i <= n - 1; i++) {
        printf(" ");
    }
    printf("*");
    printf("\n");
    for (int i = 1; i <= n - 1; i++) {
        for (int j = 1; j <= n - 1 - i; j++) {
            printf(" ");
        }
        for (int j = 1; j <= i; j++) {
            printf("*");
        }
        printf("*");
        for (int j = 1; j <= i; j++) {
            printf("*");
        }
        printf("\n");
    }
}
 
cs

 

 

여기서부턴 나올지 의문이지만 정말 사악하게 낸다면 낼 수도 있는 분할정복! 

아마 함수까지 공부를 할거니까 for문+ 재귀의 조합이라면 나올수 있겠다 싶지만.. 이러면 애들이 코딩을 포기하지 않을까.. 이미 나부터도.. 허허허

 

#별찍기 10번

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include<stdbool.h>
#include<math.h>
 
char arr[6562][6562];
 
void Print(int row, int col, int num) {
    if (num == 1) {
        arr[row][col] = '*';
        return;
    }
    int n = num / 3;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (i == 1 && j == 1) {
                continue;
            }
            else {
                Print(row + (i * n), col + (j * n), n);
            }
        }
    }
}
int main() {
 
    int n;
    scanf("%d"&n);
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            arr[i][j] = ' ';
        }
    }
 
    Print(00, n);
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }
    
}
cs

 

#별찍기 11번

 

분할하고 -> 마지막에 별찍어주고

분할의 기준을 잡고 가는게 어렵다.

이번 별찍기는 맨 위 중앙에 있는 별이 기준이였다!

 

 

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <stdio.h>
#include<stdbool.h>
 
 
char arr[3080][6200];
void Print(int row, int col, int num) {
 
    if (num == 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= '*';
        return;
    }
    else {
        int n = num / 2;
        Print(row, col, n);//중앙 맨위
        Print(row + n, col - n, n); //중앙 맨위 에서 좌측 아래
        Print(row + n, col + n, n);//중앙 맨위 에서 우측 아래
    }
 
    
 
}
 
int main() {
    int n;
    scanf("%d"&n);
    
    
    //공백으로 채워주기
 
    int m = 2 * n - 1;
 
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            arr[i][j] = ' ';
        }
    }
 
    Print(0, n-1, n); //가장 맨위 중앙에서 부터 시작 
    //근데 인덱스가 0부터 시작이기 때문에 n-1 0행 23열
   
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }
   
}
 
cs
728x90
반응형

댓글