⌨️CS-PS/백준_수학&구현

[Baekjoon/백준][2444][C/C++] 별 찍기 - 7

미르의 블로그 2023. 1. 19. 00:07
728x90
반응형
『목차』
0. 개요

1. 문제
2. 풀이
3. 코드

0. 개요

2442, 2443과 세트 문제인 2444. 3문제를 순서대로 풀어보자. 원리가 똑같다.

[Baekjoon][2442][C/C++] 별 찍기 - 5

[Baekjoon][2443][C/C++] 별 찍기 - 6

1. 문제

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

 

2444번: 별 찍기 - 7

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

www.acmicpc.net

[문제]

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

[입력]

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

[출력]

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

[예제 입력 1]

5

[예제 출력 1]

    *
   ***
  *****
 *******
*********
 *******
  *****
   ***
    *

2. 풀이

2442번 문제의 풀이에

[Baekjoon][2442][C/C++] 별 찍기 - 5

2443번 문제의 풀이를 합치면 그게 바로 정답이다.

[Baekjoon][2443][C/C++] 별 찍기 - 6

단, 두 코드를 그냥 합치게 되면, 별이 가장 많이 찍혀있는 줄이 2번 반복된다. ∴ 해당 줄을 1번만 출력되게, for문 에서의 n값을 n-1로 변경하면 된다. (8번 줄에 있는 n을 n-1로 바꿔도 되고, 26번 줄에 있는 n을 n-1로 바꿔도 된다.)

3. 코드

#pragma warning (disable:4996)
#include <stdio.h>

int main(int argc, char* argv[]) {
	int n; scanf("%d", &n);

	/*2442번 문제*/
	for (int i = 1; i <= n-1; i++) {
	//2442번 문제와의 차이점 : n을 n-1로 변경. (∵중복되는 줄 없애기 위함.)

		/* 공백 찍기 */
		for (int j = 1; j <= n - i; j++) {
			printf(" ");
		}

		/* 별 찍기 */
		for (int j = 1; j <= (2 * i) - 1; j++) {
			printf("*");
		}

		/* 개행 */
		printf("\n");
	}

	/*2443번 문제*/
	for (int i = n; i >= 1; i--) {//여기의 n을 n-1로 변경해도 된다.

		/* 공백 찍기 */
		for (int j = 1; j <= n - i; j++) {
			printf(" ");
		}

		/* 별 찍기 */
		for (int j = 1; j <= (2 * i) - 1; j++) {
			printf("*");
		}

		/* 개행 */
		printf("\n");
	}

	return 0;
}
728x90
반응형