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은 과연..
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[C]백준_10951 : A+B - 4 (0) | 2023.07.20 |
---|---|
[C]백준_10952 : A+B - 5 (0) | 2023.07.19 |
[C]백준_10871 : X보다 작은 수 (0) | 2023.07.17 |
[C]백준_2438 : 별 찍기 - 1 (0) | 2023.07.16 |
[C]백준_11022 : A+B - 8 (0) | 2023.07.15 |