<별 찍기 2438번>
<풀이>
#include<stdio.h>
int main(void)
{
int n;
scanf("%d",&n);
for (int i = 0; i < n; i++) {
for (int j = 0; j <i+1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
반복문을 이용해 해당 문제의 풀이를 작성하였고, 두번째 for문의 j < i + 1의 조건에 의해 별의 갯수를 문제의 조건에 맞게 찍어주었다 할 수 있다.
<별찍기2- 2439번>
<오답>
출력결과에서 볼 수 있듯이 출력된 모든 문장에서 공백이 한칸씩만 들어갔다는것을 알 수 있다.
그 이유는 for문을 이중중첩한 것에서 나타나는데 첫번째 i = 0일때 공백하나가 출력이되고, 그옆에바로 밑의 for문의 조건에 맟는 별의 갯수가 출력이 된다. 그리고는 줄바꿈이 되고 다시 i = 1일때 공백하나 출력, 그옆에 조건에 맞는 별이 찍히기 때문에 문제와는 다른 출력결과가 나타난다. 이해를 돕기위해 예시 하나를 밑에 작성해보았다.
<예시>
<오답 2>
공백을 출력해주는 for문이 i의 값이 바뀌어 다시 반복이 시작될때 마다, k = 0부터 다시 반복이 시작이 되어 5를 입력하였을때, 5개의 공백이 모든 출력결과에 드러나는것을 볼 수 있다. 이 같은 결과로 공백을 출력하는 조건식에 문제가 있다 생각 하였고 아래와 같은 코드를 작성하였다.
<정답 풀이>
#include<stdio.h>
int main(void)
{
int n;
scanf("%d", &n);
for(int i = 0;i<n;i++){
for (int k = 1; k<n-i; k++) {
printf(" ");
}
for (int j = 0; j < i + 1; j++) {
printf("*");
}
printf("\n");
}
return 0;
}
공백이 찍히는 갯수를 조절해줌으로써 위 문제의 조건을 만족시킬 수 있었다.