본문 바로가기

프로그래밍/C++

[C++] 입력한 수만큼 뒤집어진 반삼각형 별찍기 (for문 반복문 예제)

개념

아래 삼각형의 개념은 단순합니다.
입력한 수만큼의 별만 찍으면 되는데 공백은 따로 필요없겠죠?

출력하면 이런 형식으로 나올것이고 규칙을 먼저 찾아보면 됩니다.

라인을 뜻하는 변수 i는 이런식으로 입력값만큼만 나올것이구요
5를 입력했을때 가상의 표입니다.



규칙을 찾아봅시다.
i = 가로줄의 갯수(입력한만큼)
k = 별을 찍는 갯수


규칙을 찾으셨나요?

i = 1씩 증가하며 끝은 입력한 수만큼 진행이 됩니다.

k = 1씩 별을 찍어내며 입력값-i만큼 별을 찍어내고 있습니다.



코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int main()
{
    int i, k; /* i: 가로줄의 갯수, k: 별의 갯수 */
    int line; /* 사용자가 입력한 값을 저장할 변수 */
 
 
    printf("입력");
    scanf("%d"&line); /* 사용자에게 입력받기 위한 코드 */
 
    for (i = 0; i < line; i++/* 사용자가 입력한 만큼의 가로줄 반복 */
    {
        for (k = 0; k < line - i; k++/* 사용자가 입력한만큼에서 i를 뺀만큼 별 찍기 */
        {
            printf("*");
        }
        printf("\n");
    }
}
cs

코드는 간결하고 쉽지만 아래부분이 이해가 안가시는분이 계실겁니다.
for (k = 0; k < line - i; k++)이해가 안되시는분은 임의로 숫자를 넣어 풀어보시면 도움될겁니다.
왜 line - i를 넣는것일까?
1. 만약에 line만 넣게되면 *은 계속 입력한 갯수만큼만 찍게됩니다.
ex) 5를 입력한다면 첫번째부터 다섯번째줄까지 모두 *****가 찍힐것입니다.
2. 만약에 i만 넣는다면?
ex) 첫번째줄엔 별*, 두번째줄엔 **, 세번째줄엔 *** 이런식으로 줄만큼 별이 찍힐겁니다.


실행

5를 입력해봅시다



실행된 것을 확인하실 수 있습니다.





개념

위에 있는 반삼각형의 반대로도 해봐야겠죠?
아래 그림과 같이 별을 찍어보겠습니다.

가장먼저 해야할것은 별을 직접 그려보고 규칙을 찾는것 입니다.

별과 공백의 규칙성을 찾아봅시다.




일단 5를 입력했을때 i는 5줄이 생성되겠죠?






그다음 규칙을 찾아봅시다.

j = 공백의 갯수

k = 별의 갯수

입니다.


j(공백)는 0부터 하나씩 증가하고 있습니다.

k(별)는 입력한수만큼 찍다가 하나씩 줄어들고 있습니다.



코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
 
int main()
{
    int i, k, j; /* i: 입력한 가로줄의 갯수, k: 별의갯수, j: 공백의 갯수 */
    int line;     /* 입력한 수를 저장할 변수 */
 
 
    printf("입력");
    scanf("%d"&line); /* 입력받기 위한 코드 */
 
    for (i = 0; i < line; i++)   /* 사용자가 입력한 만큼의 가로줄 반복 */
    {
        for (j = 0; j <= i; j++/* 공백이 별보다 와야 하므로 공백부터 */
        {
            printf(" ");
        }
        for (k = 0; k <= line - j; j++/* 별을 찍는다 */
        {
            printf("*");
        }
        printf("\n");
    }
}
cs



실행화면

입력을 해줍니다.



입력했을때 실행되는 화면