코딩테스트 & 문제 풀이

[C]백준_2439 : 별 찍기 - 2

Hicecream 2023. 7. 18. 00:15

2022년 9월 23일에 작성됨

 

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

 

2439번: 별 찍기 - 2

첫째 줄에는 별 1개, 둘째 줄에는 별 2개, N번째 줄에는 별 N개를 찍는 문제 하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.

www.acmicpc.net

 

 

문제 분석

전 포스팅인 "2438번 별 찍기 - 1"에서 오른쪽 정렬된 형태로 출력하기

이전 포스팅 설명 참고
https://velog.io/@alal11/C%EB%B0%B1%EC%A4%802438-%EB%B3%84-%EC%B0%8D%EA%B8%B0-1

 

 

소스 코드 (⭕)

#include <stdio.h>

int main()
{
    int N;

    scanf("%d", &N);

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

 

코드 분석

1. 먼저 N을 입력받는다.

2. 중첩 for 문을 이용하여 바깥 for 문은 \n(강제 개행 문자), 첫 번째 안쪽 for 문은 빈칸 출력, 두 번째 안쪽 for 문은 * 출력으로 해준다.

    2-1. 가장 바깥 for 문은 i = 0부터 N - 1까지 N번 반복하게 해준다.

    2-2. 첫 번째 안쪽 for 문은 빈칸을 출력해줘야 하는데, 예제 출력을 보면 빈칸의 개수가 N - 1개 부터 하나씩 줄어든다.
따라서, j = N - 1부터 i보다 클 때까지 반복하고, 반복할 때마다 빈칸의 개수가 줄어들도록 j--을 해준다.

    2-3. 두 번째 안쪽 for 문은 *을 1개 부터 N개까지 출력해야 하기 때문에 k = 0부터 i까지 N개의 *을 출력해준다.

 

 

예를 들어 N = 3이라고 하면,

i (\n) j (빈칸) k (*)
0 2, 1 0
1 2 0, 1
2 X 0, 1, 2

 

표에서 0, 1, 2의 값은 중요하지 않다. 몇 번 실행되는지에 주목할 것!
i가 0일 땐 j는 2번, k는 1번.
i가 1일 땐 j는 1번, k는 2번.
i가 2일 땐 j는 0번, k는 3번.

즉, 코드에선 j, k, i 순으로 실행되기 때문에
빈칸 2번, 별 1번, 줄 바꿈 1번.
빈칸 1번, 별 2번, 줄 바꿈 1번.
빈칸 X, 별 3번, 줄 바꿈 1번.

 

 

 

end

별 찍기 정말.. 헷갈리고 어렵다..
그래도 이 정도 까진 혼자 풀 수 있는 난이도!
다음 별 찍기 3은 과연..