코딩테스트 & 문제 풀이

[C]백준 2440 : 별 찍기 - 3

Hicecream 2023. 11. 19. 17:05

2023년 1월 24일에 작성됨

 

https://www.acmicpc.net/problem/2440

 

2440번: 별 찍기 - 3

첫째 줄에는 별 N개, 둘째 줄에는 별 N-1개, ..., N번째 줄에는 별 1개를 찍는 문제

www.acmicpc.net

 

 

문제 분석

이중 for문을 이용하여 문제를 풀 수 있다.

 

 

소스 코드 (⭕)

#include <stdio.h>

int main()
{
    int a;

    scanf("%d", &a);

    for (int i = 0; i < a; i++)
    {
        for (int j = a - i; j > 0; j--)
        {
            printf("*");
        }
        printf("\n");
    }
}

 

코드 분석

예를 들어 a = 4라고 하면,

i j
0 4, 3, 2, 1
1 3, 2, 1
2 2, 1
3 1

 

여기서 i와 j가 '몇 번' 실행되는지에 주목할 것!

i를 \n으로 생각하고, j를 * 출력으로 생각해보자.

코드 상 안쪽 for문이 먼저 실행되므로
i = 0일 때, printf("*") 4번 반복, printf("\n") 1번
i = 1일 때, printf("*") 3번 반복, printf("\n") 1번
i = 2일 때, printf("*") 2번 반복, printf("\n") 1번
i = 3일 때, printf("*") 1번 반복, printf("\n") 1번

이런 식으로 a 값에 따라 예제 출력과 같은 모양으로 출력할 수 있다.

여기서 핵심은 안쪽 for문에서 j의 값이 a - i부터 시작한다는 것이다.
a 값은 고정이고, i 값은 0부터 a-1까지 증가하므로 j의 시작점은 계속 감소하는 방식으로 별의 개수를 역순으로 출력해주는 것이다.

 

 

end

처음 별 찍기 문제를 풀고 거의 반년이 지나서 실력 확인 겸 다시 풀어보려고 했는데.. 쉽게 풀리겠지? 하고 풀다가 생각보다 헷갈려서 충격 먹었다..!!! 😭😭
그래도 혼자 풀 수 있는 난이도이긴 하지만 빠르게 풀릴 줄 알았는데 쩝..
더 열심히 하자 파이팅!!! 혼자서 별 찍기 정복해주겠어ㅂㄷㅂㄷ