표준 입력으로 삼각형의 높이가 입력됩니다(입력 값의 범위는 3~10). 입력된 높이만큼 산 모양으로 별을 출력하는 프로그램을 만드세요(scanf 함수 호출 전에 문자열을 출력하면 안 됩니다). 이때 출력 결과는 예제와 정확히 일치해야 합니다. 모양이 같더라도 공백이나 빈 줄이 더 들어가면 틀린 것으로 처리됩니다.
표준입력
3
표준 출력
*
***
*****
표준 입력
5
표준 출력
*
***
******
********
**********
정답
#include <stdio.h>
int main()
{
int num;
scanf("%d", &num);
for (int i = 0; i < num; i++)
{
for (int j = 0; j <= (num - 1) * 2 + 1; j++)
{
if (j >= num - i - 1&& j <= num + i - 1)
printf("*");
else
printf(" ");
}
printf("\n");
}
return 0;
}
풀이
먼저, 가로와 세로를 확인해야 하는데, 입력받은 수가 3일 때, 산의 높이라고 할 수 있는 가로가 3이고, 5인 경우에도 마찬가지이므로 가로는 그냥 입력받는 수라고 생각하면 된다.
다음으로 따져봐야 할 것이 세로인데, 3을 기준으로, i의 값이 0일 때, j의 값 0,1이 공백이고 2는 *이며 3과4는 공백이다. i의 값이 1일 때,
j의 값 0이 공백이고 1,2,3은 *이고 4가 공백이다. i가 3일 때는 공백이 없고 전부 *로 채워져있다. 따라서, j는 입력받은 수에서 i와 1만큼을 빼준 숫자보다 크거나 같고 입력받은 수에서 i를 더하고 1만큼 빼준 수보다 작거나 같을 때까지 *을 출력하면 피라미드 모양을 만들 수 있다.
만약 여기서 1을 제외하지 않으면 산 모양의 가장 아랫줄이 1칸 띄워진 채로 산 모양이 그려지므로 오답이 나오게 된다.
이 문제는 초보자가 풀면 오랜 시간이 걸릴 수도 있고, 못 풀 수도 있다. 하지만 그렇다고 해서 낙담할 필요는 없고, 이해가 될 수 있을 때까지 이 문제를 복기해보자.
'C' 카테고리의 다른 글
[C] C언어 코딩 도장 33.8 심사문제: 5와 11의 배수, 공배수 처리하기 (0) | 2022.04.27 |
---|---|
[C] C언어 코딩 도장 32.6 심사문제: 중첩 루프 빠져나오기 (0) | 2022.04.27 |
[C] C언어 코딩 도장 30.7 심사문제: 두 수 사이의 숫자 중 7로 끝나지 않는 숫자 출력하기 (0) | 2022.04.27 |
[C] C언어 코딩 도장 29.10 심사문제: 숫자의 합 구하기 (0) | 2022.04.27 |
[C] C언어 코딩 도장 28.11 심사문제: 교통카드 잔액 출력하기 (0) | 2022.04.27 |