⌨️CS-PS/백준_수학&구현
[Baekjoon/백준][2445][C/C++] 별 찍기 - 8
미르의 블로그
2023. 1. 19. 00:09
728x90
반응형
『목차』
0. 개요
1. 문제
2. 풀이
3. 코드
0. 개요
브론즈 레벨의 별찍기 문제들은 패턴이 전부 비슷하다. 백준 검색창에 '별'을 입력하면 별찍기 문제들이 여러개 나오니, 날 잡고 한번 풀어보자. 물론, 브론즈 너머의 문제들은 조금 더 어렵다.
1. 문제
https://www.acmicpc.net/problem/2445
2445번: 별 찍기 - 8
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
[문제]
예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.
[입력]
첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.
[출력]
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
[예제 입력 1]
5
[예제 출력 1]
* *
** **
*** ***
**** ****
**********
**** ****
*** ***
** **
* *
2. 풀이
일반적인 별찍기 문제들은 윗줄, 가운데줄, 아랫줄을 나눠 생각해야 한다.
이 문제 역시 그러한데, 윗줄(가운데줄)과 아랫줄을 구분하여 따로 코딩한 다음 하나로 합쳐야 한다.
이때, 윗줄과 아랫줄이 대칭 형태일 경우, 가장 바깥쪽 for문의 반복변수만 살짝 손봐주면(8행과 28행), for문 내부의 코드를 따로 고칠 필요 없이 복사 붙여넣기로 해결이 가능하다. (아래 코드를 보면, 9행~24행 까지의 코드와 29행~44행 까지의 코드가 서로 동일하다.)
3. 코드
#pragma warning (disable:4996)
#include <stdio.h>
int main(int argc, char* argv[]) {
int N; scanf("%d", &N);
/* 윗줄(가운데 줄 포함) */
for (int i = 1; i <= N; i++) {
/* 왼쪽 별 찍기 */
for (int j = 1; j <= i; j++)
printf("*");
/* 공백 찍기 */
for (int j = 1; j <= 2 * (N - i); j++)
printf(" ");
/* 오른쪽 별 찍기 */
for (int j = 1; j <= i; j++)
printf("*");
/* 개행 */
printf("\n");
}
/* 아랫줄 */
for (int i = N-1; i >= 1; i--) {
/* 왼쪽 별 찍기 */
for (int j = 1; j <= i; j++)
printf("*");
/* 공백 찍기 */
for (int j = 1; j <= 2 * (N - i); j++)
printf(" ");
/* 오른쪽 별 찍기 */
for (int j = 1; j <= i; j++)
printf("*");
/* 개행 */
printf("\n");
}
return 0;
}
728x90
반응형