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;
}
먼저 N을 입력받는다.
중첩 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번.
별 찍기 정말.. 헷갈리고 어렵다..
그래도 이 정도 까진 혼자 풀 수 있는 난이도!
다음 별 찍기 3은 과연..