31.4 대각선으로 별 출력하기

이번에는 출력 부분을 수정하여 별을 대각선으로 그려보겠습니다.

star_diagonal.c

#include <stdio.h>

int main()
{
    for (int i = 0; i < 5; i++)    // 5번 반복. 세로 방향
    {
        for (int j = 0; j < 5; j++)    // 5번 반복. 가로 방향
        {
            if (j == i)               // 세로 방향 변수와 같을 때
                printf("*");          // 별 출력
        }
        printf("\n");              // 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
    }

    return 0;
}

가로 방향 변수와 세로 방향 변수가 같을 때만 별을 출력하면 왼쪽 위에서 오른쪽 아래 방향으로 별이 출력될 것입니다. 하지만, 별을 출력해보면 다음과 같이 세로로 출력이 됩니다.

실행 결과

*
*
*
*
*

콘솔에서는 문자 출력을 하지 않으면 다음 문자는 이전 위치에 출력되므로 모두 왼쪽으로 몰리게 됩니다. 따라서 다음과 같이 별을 출력하지 않는 부분에서 printf로 공백을 출력해주어야 별이 원하는 위치에 오게 됩니다.

star_diagonal.c

#include <stdio.h>

int main()
{
    for (int i = 0; i < 5; i++)    // 5번 반복. 세로 방향
    {
        for (int j = 0; j < 5; j++)    // 5번 반복. 가로 방향
        {
            if (j == i)               // 세로 방향 변수와 같을 때
                printf("*");          // 별 출력
            else                      // 세로 방향 변수와 다를 때
                printf(" ");          // 공백 출력
        }
        printf("\n");             // 가로 방향으로 별을 다 그린 뒤 다음 줄로 넘어감
    }

    return 0;
}

실행 결과

*
 *
  *
   *
    *

별이 왼쪽 위에서 오른쪽 아래 방향인 대각선 모양으로 그려졌습니다. 가로 방향과 세로 방향의 변수 값이 같을 때 별을 출력하고, 같지 않을 때는 공백을 출력하였습니다.

지금까지 중첩 루프와 조건문을 활용하는 방법을 배웠는데 내용이 조금 어렵고 복잡했습니다. 사실 머리속으로 상상해서 조건식을 만들어내기는 쉽지 않습니다. 실제로는 <, >, <=, =>를 번갈아서 넣어보며 결과를 확인하는 경우가 많으므로 이해가 되지 않는다고 해서 걱정할 필요는 없습니다. 여기서 바깥쪽 루프는 세로 방향, 안쪽 루프는 가로 방향을 처리한다는 점만 기억하면 됩니다.