728x90
for 반복문은 이정도면 숙련이다! 라고 생각한 나에게
큰 충격을 준 문제다.
문제
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
입력
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
출력
첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.
예제 입력 1
1
예제 출력 1
*
예제 입력 2
2
예제 출력 2
*
***
예제 입력 3
3
예제 출력 3
*
* *
*****
예제 입력 4
4
예제 출력 4
*
* *
* *
*******
이 문제의 핵심은 * *사이에 공백을 출력하면서
반복문으로 만들기 인것같다.
중요한건 for 반복문을 사용할때
for(int j=0;j<n-i-1;j++)
printf(" ");
printf("*");
반복문을 {} 괄호로 묶지않고 생략하게 되면
첫번째 printf 만 반복되고 두번째 printf *은 한번만 출력된다는 것이다. 난 이걸 몰라서 혼자 말도 안되는 지저분한 코드를 만들었다.
[소스코드] -변경전
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=0;j<n-i;j++){
printf(" ");}
if(i==1){
for(int k=0;k<1;k++)
printf("*"); }
if(i>1 && i<n) {
for(int t=0;t<1;t++){
printf("*");
for(int k=1;k<=2*i-3;k++)
printf(" ");
for(int t=0;t<1;t++)
printf("*");}}
printf("\n");
if(i==n-1 && n!=1){
for(int z=0;z<2*n-1;z++)
printf("*");
if(n==1){printf("*");}
}}
return 0;
}
딱봐도 너무 난잡하고 지저분 하지 않은가?
다음은 위의 지식을 알고 정리해본 소스코드다.
[소스코드] -변경후
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n-1;i++){
for(int j=0;j<n-i-1;j++)
printf(" ");
printf("*");
if(i!=0){
for(int k=0;k<2*i-1;k++)
printf(" ");
printf("*"); }
printf("\n"); }
for(int i=0;i<2*n-1;i++)
printf("*");
printf("\n"); }
[후기]
별 문제는 응용의 반복이라 이제 어렵진 않다.
하지만 하면 할수록 새롭고 더 성장하는 기분이 들어
굉장히 좋은 문제라고 생각한다. 오늘도 좋은 지식을 얻었다.
'백준 알고리즘' 카테고리의 다른 글
백준 온라인 1850번 최대공약수 C언어 (0) | 2022.12.18 |
---|---|
[백준 알고리즘 c언어 2446 별 찍기9번] (2) | 2022.09.25 |
[백준 알고리즘 2443번 별찍기-6번] (0) | 2022.09.24 |
[백준 알고리즘 c언어 2442번 별찍기-5 초보버전] (0) | 2022.09.24 |
[백준 알고리즘 c언어 11721번] (2) | 2022.09.23 |