본문 바로가기
Study (etc)/Problem Solving

[BOJ / C] 2444번 : 별 찍기 - 7

by Haren 2019. 4. 5.

<백준 온라인 저지 : 2444번>

- 별 찍기 - 7 -






문제설명


문제:

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요


입력:

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.


출력:

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









이 문제를 풀기 전에


- 이 문제의 출력은 지난 번에 해결했던 별 찍기 -5 번의 피라미드 모양과 별 찍기 - 6번의 역삼각형 모양을 붙여놓은 느낌이 든다. 두 문제의 코드를 적절히 조합하면 해결될 것 같다.


- 해당 출력은 가장 많은 별이 출력되는 줄을 기점으로 대칭이다. (이 점을 잘 생각해야 한다. 덕분에 곤혹을 치렀다.)


- 대칭이라는 것만 잘 생각한다면 매우 쉬운 문제.






내 소스 -1 (실패)


출력 결과가 제시한 출력과 유사해서 손쉽게 풀렸다고 생각했었지만, 그건 내 착오였다.

#include <stdio.h>

int main()
{
    int input;
    int i,j;
    
    scanf("%d",&input);
    
    for(i=1;i<=input;i++) // N번줄 및 개행 반복하기 위한 for문
    {
        for(j=input-i;j>0;j--) // 공백을 출력하기 위한 for문
            printf(" ");
        
        for(j=0;j<2*i-1;j++) // *을 출력하기 위한 for 문
            printf("*");
        
        printf("\n");
    }
    
    for(i=input;i>0;i--)
    {
        for(j=input-i;j>0;j--) 
            printf(" ");
        
        for(j=0;j<2*i-1;j++) 
            printf("*");
        
        printf("\n");
    }
    
    return 0;
}


이 코드는 틀린 코드다. 모양은 비슷하게 출력 되지만, 문제가 있다.

첫 중첩 for문에서 출력해주는 피라미드 모양의 별의 맨 밑 줄과, 두 번째 중첩 for문에서 출력하는 역삼각형 모양 별의 맨 윗줄의 별 개수가 겹친다.

즉, 문제는 다음 이미지와 같다.



가운데에 같은 갯수의 별이 출력된 것을 확인할 수 있다.



내 소스 - 2 성공



#include <stdio.h>

int main()
{
    int input;
    int i,j;
    
    scanf("%d",&input);
    
    for(i=1;i<=input;i++) // N번줄 및 개행 반복하기 위한 for문
    {
        for(j=input-i;j>0;j--) // 공백을 출력하기 위한 for문
            printf(" ");
        
        for(j=0;j<2*i-1;j++) // *을 출력하기 위한 for 문
            printf("*");
        
        printf("\n");
    }
    
    for(i=input-1;i>0;i--)
    {
        for(j=input-i;j>0;j--)
            printf(" ");
        
        for(j=0;j<2*i-1;j++)
            printf("*");
        
        printf("\n");
    }
    
    return 0;
}

이제 차이점이 보이는가? 두 번째 중첩 for문에서 i = input 이었던 대입식을 i = input-1으로 수정하여 똑같은 두 줄이 생기는 것을 막아주었다.

출력도 정상적으로 잘 이루어지는 모습을 확인할 수 있었다.



채점 결과




'Study (etc) > Problem Solving' 카테고리의 다른 글

[BOJ / Python ] 2739번 : 구구단  (0) 2019.05.02
[BOJ / C] 2445번 : 별 찍기 -8  (0) 2019.04.11
[BOJ / C] 1546번 : 평균  (0) 2019.04.05
[BOJ / C] 2443번 : 별찍기 -6  (0) 2019.04.01
[BOJ / C] 10871번 : X보다 작은 수  (0) 2019.04.01