#include <stdio.h>
int main(){
int N = 0;
int j = 0;
int k = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
for (k=N-i; k > 0; k--)
{
printf(" ");
}
for (j = N; j > N-i-1; j--)
{
printf("*");
}
for (j = N; j > N-i; j--)
{
printf("*");
}
for (k=N-i; k > 1; k--)
{
printf(" ");
}
printf("\n");
}
return 0;
}
//오류 코드
#include <stdio.h>
int main(){
int N = 0;
int j = 0;
int k = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
for (k=N-i; k > 0; k--)
{
printf(" ");
}
for (j = N; j > N-i-1; j--)
{
printf("*");
}
for (j = N; j > N-i; j--)
{
printf("*");
}
printf("\n");
}
return 0;
}
//오류코드
1번은 공백이 옆에도 있어야 하는줄 알고 옆에에도 했다..
보면 파란색으로 빈공간이 다 공백으로 반복문으로 채워넣어준것이다..
2번은 공백이 원래 있어야 하는 것보다 한번 더 있어서 출력이 맞지 않다고 했다.
눈으로 봐서는 똑같은 출력결과 인것 같은데.. 제대로 확인할 필요가 있다.
2번 코드에서 딱 하나만 바꾸면 알맞는 것이 되었다.
이 문제는 2441번과 굉장히 유사하다
(둘의 *와 공백의 출력 순서와 출력 개수를 바꿔주면 되기 때문에 매우 EZ하게 넘어갈 수 있다. )
#include <stdio.h>
int main(){
int N = 0;
int j = 0;
int k = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
for (k=N-i; k > 1; k--)
{
printf(" ");
}
for (j = N; j > N-i-1; j--)
{
printf("*");
}
for (j = N; j > N-i; j--)
{
printf("*");
}
printf("\n");
}
return 0;
}
정답코드
<코드해석>
일단 제일 큰 반복문으로 N번 반복시켜준다.
그 다음 공백을 해주는데 N-i만큼 즉 처음에는 5번 그다음에는 k--로 줄어들게 준다.
그 다음 5~2까지 출어들게 하는 것이다.
그 다음 *를 찍어준다.
1
2 1
3 2
4 3
5 4
를 이용해서 찍어주었다.
바로 3 5 7 할 수 있었는데 이게 편리했다..
마지막으로 \n을 이용해서 줄을 띄어주면 원하는 출력이 나온다.
이 문제에서 유의해야할 점은 공백이 어디에 있는지.
몇 개의 공백이 있는지를 제대로 파악하고 해야지 저처럼 출력형식이 잘못되는 일이 없을 것이다..
댓글 영역