안경잡이 구루루

백준 2439 ( 별 찍기- 2 ) [ C programming ] 본문

C언어(C programming)/문제풀이(백준,BaekJoon)

백준 2439 ( 별 찍기- 2 ) [ C programming ]

구루루(gururu) 2020. 5. 26. 17:18
반응형


나:

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

완성된 코드는 위와 같다.

 

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

별의 최종 개수를 정하는 N의 자료형을 선언하고 입력값을 받는다

 

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

이 문제의 핵심은 *의 개수가 1개씩 늘어나지만 거꾸로 출력하도록 만들어야 한다.

예제 출력을 보면 빈칸의 개수는 N-1개의 개수에서 하나씩 줄어든다. 그래서 빈칸과 *의 출력을 따로 만들었다.

우선 외부 반복문 1번당 내부 반복문 전체 실행을 이용해서 for 반복문의 중첩을 이용

내부 반복문 중 빈칸을 출력하는 방법은 N-K까지 출력하도록 해서 빈칸 출력의 개수가 1개씩 줄어들도록 만듦

내부 반복문 중 * 을 출력하는 방법은 줄어든 빈칸의 개수와 반대로 1개씩 늘어나도록 만듦

이때 한줄의 출력이 끝나면 다음줄로 옮겨야 차례대로 * 출력이 늘어나기 때문에 제어코드 \n을 반복문 마지막에 사용


다른사람:

https://developerin.tistory.com/32

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

완성된 코드는 위와 같다.

빈칸과 * 출력의 방식을 for로 나누지 않고  if구문을 이용해 출력했다

 

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

for 반복문의 중첩을 사용해서 출력하고자 한다.

빈칸을 출력하는 기준은 if 구문에서 총 별의 개수 - 출력할 별의 개수 ( N - i ) 를 이용해 빈칸의 개수를 맞추고

* 를 출력하는 기준은 위의 경우가 아니면 되기 때문에 else 구문을 사용했다.

이때 한줄에 하나씩 * 의 개수가 늘어나야 되기 때문에 내부반복문이 끝난 후 제어코드 \n 을 사용

반응형