C language/Baekjoon

[C] 백준 2445번 풀이: 별찍기 -8

저별이 2021. 7. 26. 15:29
728x90

이 문제는 별찍기입니다.

별찍기는 프로그래밍 언어를 배운다면 한번쯤 꼭 하게 되는

문제이고 여기서는 별갯수를 대칭으로 만드는 것이

고민하게 만드는 문제입니다.

먼저 문제 링크입니다.

https://www.acmicpc.net/problem/2445

 

2445번: 별 찍기 - 8

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

<코드1>

#include <stdio.h>
int main(void) {
    int a;
    int i = 0; 
    int j = 0;

    scanf("%d", &a);
    int l = a-2;
    int m = 0;
    for(i=1;i<a+1;i++) {
        for (j = 0; j < i;j++) {
            printf("*");
        }
        for (int k = l; k>=0;k--) {
            printf(" ");
        }
        for (int k = l; k >= 0; k--) {
            printf(" ");
        }
        for (j = 0; j < i; j++) {
            printf("*");
        }
        printf("\n");
        l--;
    }
    for (i = a - 1; i >= 0; i--) {
        for (j = i - 1; j >= 0; j--) {
            printf("*");
        }
        for (int k = 0; k <= m; k++) {
            printf(" ");
        }
        for (int k = 0; k <= m; k++) {
            printf(" ");
        }
        for (j = i - 1; j >= 0; j--) {
            printf("*");
        }
        printf("\n");
        m++;
    }
}

첫번째로 짠 것은 단순히 정리하지 않고 순수히

정렬을 했을 때 만들어지는 모양입니다.

 

갯수가 늘어나면 ++를 이용하였고

줄어들면 --를 이용하여 출력흘 하였습니다.

그리고 해주는 과정 안에서도 계속 l,m을 늘려주어야 하기 때문에

별도로 늘려주는 값을 넣었습니다.

 

<코드2>

#include <stdio.h>
int main(void){
    int N;
    scanf("%d", &N);
    
    for(int row=1;row<=N;row++){
        for(int star=0;star<row;star++) 
            printf("*");
        for(int blank=0;blank<(N-row)*2;blank ++) 
            printf(" ");
        for(int star=0;star<row;star++) 
            printf("*");
        
        printf("\n");
    }
    for(int row=1;row<N;row++){
        for(int star=0;star<(N-row);star++) 
            printf("*");
        for(int blank=0; blank<(row*2);blank++) 
            printf(" ");
        for(int star=0;star<(N-row);star++) 
            printf("*");
        
        printf("\n");
    }
    return 0;
}

2번째로 한것은 훨씬 깔끔한 코드입니다.

여기서는 빈칸 부분을 다듬었다고 할 수 있습니다.

N-row, row*2를 이용해 --라는 거꾸로 만드는 것을

더욱 편하게 만들어 줄 수 있습니다. 

그리고 두번 빈칸 반복되는 것을 *2라는 것을 통해

줄일 수 있습니다.

 

 

 

728x90