본문 바로가기

백준 알고리즘

[백준알고리즘c언어 10992번 별찍기-17번]

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"); }          

[후기]

별 문제는 응용의 반복이라 이제 어렵진 않다.
하지만 하면 할수록 새롭고 더 성장하는 기분이 들어
굉장히 좋은 문제라고 생각한다. 오늘도 좋은 지식을 얻었다.