본문 바로가기

Coding Tests/백준 온라인

(C언어) 백준 온라인-별 찍기

<별 찍기 2438번>

<풀이>

#include<stdio.h>
int main(void)
{
    int n;
    scanf("%d",&n);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j <i+1; j++) {
			printf("*");
		}
		printf("\n");
	}

	return 0;
}

반복문을 이용해 해당 문제의 풀이를 작성하였고, 두번째 for문의 j < i + 1의 조건에 의해 별의 갯수를 문제의 조건에 맞게 찍어주었다 할 수 있다.


 

<별찍기2- 2439번>

<오답>

출력결과에서 볼 수 있듯이 출력된 모든 문장에서 공백이 한칸씩만 들어갔다는것을 알 수 있다. 

그 이유는 for문을 이중중첩한 것에서 나타나는데 첫번째 i = 0일때 공백하나가 출력이되고, 그옆에바로 밑의 for문의 조건에 맟는 별의 갯수가 출력이 된다. 그리고는 줄바꿈이 되고 다시 i = 1일때 공백하나 출력, 그옆에 조건에 맞는 별이 찍히기 때문에 문제와는 다른 출력결과가 나타난다. 이해를 돕기위해 예시 하나를 밑에 작성해보았다.

 

<예시>

 

<오답 2>

공백을 출력해주는 for문이 i의 값이 바뀌어 다시 반복이 시작될때 마다, k = 0부터 다시 반복이 시작이 되어 5를 입력하였을때, 5개의 공백이 모든 출력결과에 드러나는것을 볼 수 있다. 이 같은 결과로 공백을 출력하는 조건식에 문제가 있다 생각 하였고 아래와 같은 코드를 작성하였다.

 

<정답 풀이>

#include<stdio.h>
int main(void)
{
	int n;
	scanf("%d", &n);

	for(int i = 0;i<n;i++){
		
		for (int k = 1; k<n-i; k++) {
			printf(" ");
		}
		for (int j = 0; j < i + 1; j++) {
			printf("*");
		}
		printf("\n");
	} 
	return 0;
}

공백이 찍히는 갯수를 조절해줌으로써 위 문제의 조건을 만족시킬 수 있었다.