상세 컨텐츠

본문 제목

[백준]BOJ_브론즈3_2442번 별찍기 5-C언어 / 출력형식이 잘못되었습니다.

카테고리 없음

by 셉인 2022. 9. 27. 17:54

본문

728x90

2442번: 별 찍기 - 5 (acmicpc.net)

 

2442번: 별 찍기 - 5

첫째 줄에는 별 1개, 둘째 줄에는 별 3개, ..., N번째 줄에는 별 2×N-1개를 찍는 문제 별은 가운데를 기준으로 대칭이어야 한다.

www.acmicpc.net

 

#include <stdio.h>

int main(){
int N = 0;
    int j = 0;
    int k = 0;
    scanf("%d", &N);
    for (int i = 0; i < N; i++)
    {
 	 for (k=N-i; k > 0; k--)
        {
            printf(" ");
        }

        for (j = N; j > N-i-1; j--)
        {
            
            printf("*");
        }
        
 	 for (j = N; j > N-i; j--)
        {
            
            printf("*");
        }

        for (k=N-i; k > 1; k--)
        {
            printf(" ");
        }

        printf("\n");
    }

    return 0;
}


//오류 코드

#include <stdio.h>

int main(){
int N = 0;
    int j = 0;
    int k = 0;
    scanf("%d", &N);
    for (int i = 0; i < N; i++)
    {
 	 for (k=N-i; k > 0; k--)
        {
            printf(" ");
        }

        for (j = N; j > N-i-1; j--)
        {
            
            printf("*");
        }
        
 	 for (j = N; j > N-i; j--)
        {
            
            printf("*");
        }

        printf("\n");
    }

    return 0;
}
 
 
 //오류코드

1번은 공백이 옆에도 있어야 하는줄 알고 옆에에도 했다..

보면 파란색으로 빈공간이 다 공백으로 반복문으로 채워넣어준것이다.. 

 

2번은 공백이 원래 있어야 하는 것보다 한번 더 있어서 출력이 맞지 않다고 했다.

눈으로 봐서는 똑같은 출력결과 인것 같은데.. 제대로 확인할 필요가 있다.

 

2번 코드에서 딱 하나만 바꾸면 알맞는 것이 되었다. 

이 문제는 2441번과 굉장히 유사하다

(둘의 *와 공백의 출력 순서와 출력 개수를 바꿔주면 되기 때문에 매우 EZ하게 넘어갈 수 있다. )

 

#include <stdio.h>

int main(){
int N = 0;
    int j = 0;
    int k = 0;
    scanf("%d", &N);
    for (int i = 0; i < N; i++)
    {
 	 for (k=N-i; k > 1; k--)
        {
            printf(" ");
        }

        for (j = N; j > N-i-1; j--)
        {
            
            printf("*");
        }
        
 	 for (j = N; j > N-i; j--)
        {
            
            printf("*");
        }

        printf("\n");
    }

    return 0;
}

정답코드

<코드해석>

일단 제일 큰 반복문으로 N번 반복시켜준다.

그 다음 공백을 해주는데 N-i만큼 즉 처음에는 5번 그다음에는 k--로 줄어들게 준다.

그 다음 5~2까지 출어들게 하는 것이다.

 

그 다음 *를 찍어준다.

1

2 1

3 2

4 3

5 4

를 이용해서 찍어주었다.

바로 3 5 7 할 수 있었는데 이게 편리했다..

 

마지막으로 \n을 이용해서 줄을 띄어주면 원하는 출력이 나온다.

 

이 문제에서 유의해야할 점은 공백이 어디에 있는지.

몇 개의 공백이 있는지를 제대로 파악하고 해야지 저처럼 출력형식이 잘못되는 일이 없을 것이다..

728x90

댓글 영역