본문 바로가기
C,C++/코드정리

[C/C++] 별찍기 구현

by 마두식 2022. 9. 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
 
int main() {
    int num;
    std::cin >> num;
    std::cout << std::endl;
 
    // 정상출력 별찍기
    for (int i = 1; i <= num; i++) {
        for (int j = 1; j <= i; j++) {
            std::cout << "*";
        }
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
 
    // 역순출력 별찍기
    for (int i = 1; i <= num; i++) {
        for (int j = num; j >= i; j--) {
            std::cout << "*";
        }
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
 
    // 삼각형 별찍기
    for (int i = 1; i <= num; i++) {
        for (int j = num; j > i; j--) {
            std::cout << " ";
        }
 
        for (int j = 1; j <= ((i * 2- 1); j++) {
            std::cout << "*";
        }
 
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
 
    // 다이아몬드 별찍기
    for (int i = 1; i < num * 2; i++) {
        if (i <= num) {
            for (int j = num; j > i; j--) {
                std::cout << " ";
            }
 
            for (int j = 1; j <= ((i * 2- 1); j++) {
                std::cout << "*";
            }
 
            std::cout << std::endl;
        }
        else {
            for (int j = num; j < i; j++) {
                std::cout << " ";
            }
 
            int count = (num * 2- i;
 
            for (int j = 1; j <= (count*2)-1; j++) {
                std::cout << "*";
            }
 
            std::cout << std::endl;
        }
    }
    return 0;
}
cs

 

우선 전체 코드입니다. 각 코드별 결과 및 분석을 간단하게 하겠습니다.

 

 

사용자로부터 num을 입력받은 후 별찍기를 구현한 결과입니다.

첫 번째 줄에 별 1개, 두 번째 줄에 별 2개, ..., n 번째 줄에 별 n개 => 이 규칙을 생각하면서 코드를 확인하시면 어렵지 않게 이해할 수 있습니다.

 

 

위의 방법에서 역순으로 출력하는 간단한 코드입니다.

첫 번째 줄에 별 n개, 두 번째 줄에 별 n-1개, ..., n 번째 줄에 별 1개 => 이 규칙을 생각하면서 코드를 분석하시기 바랍니다.

 

 

이번에는 조금 헷갈릴 수 있는 피라미드 모양 별찍기입니다. " " 와 " * " 을 따로 구분하여 규칙을 생각하여 봅시다.

첫 번째 줄에 공백 n-1개, 두 번째 줄에 공백 n-2개, ..., 첫 번째 줄에 공백 0개

첫 번째 줄에 별 1개, 두 번째 줄에 별 3개, ..., n 번째 줄에 별 2 * n - 1 개

위의 규칙을 생각하면 어렵지 않게 이해할 수 있습니다.

 

 

이제 마지막으로 다이아몬드 별찍기를 분석해 보겠습니다.

먼저 첫 번째부터 n 번째 까지 별을 출력하여 삼각형을 만들고 n+1 번째부터 n*2 - 1 번째까지 별을 출력하여 역삼각형을 만들었습니다.

 

삼각형의 경우 위에서 이미 설명한 내용이므로 넘어가도록 하겠습니다.

 

n+1 번째부터 n*2 - 1 번째 줄까지의 규칙을 분석해보겠습니다.

먼저, (n+1) ~ (n*2-1) 번째 줄이라고 생각하면 규칙을 찾기도 어렵고 번거로우므로 1~n 번째 라인은 없다고 생각하고 n+1 번째 라인을 1, n*2 - 1 번째 라인을 n 으로 가정하겠습니다.

저렇게 치환하고 나면 역삼각형의 규칙 또한 매우 간단합니다.

첫 번째 줄에 공백 1개, 두 번째 줄에 공백 2개, ..., n 번째 줄에 공백 n개

첫 번째 줄에 별 n*2 - 1, 두 번째 줄에 별 n*2 - 3, ..., n 번째 줄에 별 1개

위의 공식을 생각하고 코드를 분석하기 바랍니다.

 

 

 

잘못된 내용 혹은 더 좋은 아이디어가 있다면 편하게 댓글 달아주세요.

감사합니다.

반응형

'C,C++ > 코드정리' 카테고리의 다른 글

[C/C++] 빙고 게임 구현  (0) 2022.09.07
[C/C++] 숫자 퍼즐 게임 구현  (0) 2022.09.07
[C/C++] 야구게임 구현  (0) 2022.09.07
[C/C++] 로또 구현 (셔플 알고리즘)  (0) 2022.09.07
[C/C++] 가위바위보 게임 구현  (0) 2022.09.07

댓글