N Log

별 찍기 직각삼각형 3

문제

   0 1 2 3 4
0          *
1        * *
2      * * *
3    * * * *
4  * * * * *

해답

앞의 두 문제(별 찍기 직각삼각형 1, 별 찍기 직각삼각형 2)는 별만 출력하고 줄을 바꾸면 됐지만,
이 문제는 공백도 직접 출력해야 한다.

좌표 합을 이용한 방식

#include <stdio.h>

int main()
{
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < 5; col++)
        {
            if (row + col >= 4)
            {
                printf("*");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}

각 칸의 좌표를 (row, col)이라고 생각하면 별이 찍히는 칸은 row + col >= 4인 곳이다.
행이 증가할수록 row가 커지기 때문에 조건을 만족하는 col의 범위가 왼쪽으로 한 칸씩 넓어진다.

공백과 별을 계산해서 출력

#include <stdio.h>

int main()
{
    for (int row = 0; row < 5; row++)
    {
        for (int col = 0; col < 4 - row; col++)
        {
            printf(" ");
        }

        for (int col = 0; col <= row; col++)
        {
            printf("*");
        }

        printf("\n");
    }
}

한 행에서 필요한 만큼 공백과 별을 계산해서 출력한다.

  • 0행: 공백 4개, 별 1개
  • 1행: 공백 3개, 별 2개
  • 2행: 공백 2개, 별 3개
  • 3행: 공백 1개, 별 4개
  • 4행: 공백 0개, 별 5개

row번 행에는 공백을 4 - row개 출력한 뒤 별을 row + 1개 출력하면 된다.
다만 row + 1개를 출력할 때 인덱스가 0부터 시작한다면 0부터 row까지 출력하면 row + 1개가 된다.