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

Alal11·2022년 9월 23일
0
post-thumbnail

출처

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


문제

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

하지만, 오른쪽을 기준으로 정렬한 별(예제 참고)을 출력하시오.


입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.


출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.


예제 입출력


알고리즘 분류

  • 구현

➡️문제 분석

전 포스팅인 "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 (*)
02, 10
120, 1
2X0, 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은 과연..

0개의 댓글