N Log

별 찍기 직각삼각형 2

문제

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

해답

초기값을 이용한 방식

#include <stdio.h>

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

row는 매번 1씩 증가하기 때문에 안쪽 반복문에서 col = row로 두면 col이 가질 수 있는 값의 개수가 행마다 하나씩 줄어든다.
0번 행에서는 col이 0부터 4까지 col < 5를 만족하므로 별을 5개 찍고, 1번 행에서는 col이 1부터 4까지 col < 5를 만족하므로 별을 4개 찍는다.
이렇게 시작값을 행 번호와 같게 만들면 행 번호가 커질수록 별의 개수가 하나씩 줄어든다.

조건식을 이용한 방식

#include <stdio.h>

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

바로 앞의 코드가 안쪽 반복문의 초기값을 바꿔 별의 개수를 줄였다면, 이번에는 안쪽 반복문의 조건식을 바꾼다.
col < 5 - row를 사용하면 row가 증가할 때마다 col이 도달할 수 있는 최대 범위가 줄어들기 때문에 행이 증가할수록 별을 찍는 열의 범위가 줄어든다.

좌표 합을 이용한 방식

#include <stdio.h>

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

각 칸의 좌표를 (row, col)이라고 생각하면 별이 찍히는 칸은 row + col <= 4인 곳이다.
행이 증가할수록 row가 커지기 때문에 조건을 만족하는 col의 범위가 오른쪽에서부터 한 칸씩 줄어든다.