C language/Baekjoon
[C] 백준 2445번 풀이: 별찍기 -8
저별이
2021. 7. 26. 15:29
728x90
이 문제는 별찍기입니다.
별찍기는 프로그래밍 언어를 배운다면 한번쯤 꼭 하게 되는
문제이고 여기서는 별갯수를 대칭으로 만드는 것이
고민하게 만드는 문제입니다.
먼저 문제 링크입니다.
https://www.acmicpc.net/problem/2445
2445번: 별 찍기 - 8
첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.
www.acmicpc.net
<코드1>
#include <stdio.h>
int main(void) {
int a;
int i = 0;
int j = 0;
scanf("%d", &a);
int l = a-2;
int m = 0;
for(i=1;i<a+1;i++) {
for (j = 0; j < i;j++) {
printf("*");
}
for (int k = l; k>=0;k--) {
printf(" ");
}
for (int k = l; k >= 0; k--) {
printf(" ");
}
for (j = 0; j < i; j++) {
printf("*");
}
printf("\n");
l--;
}
for (i = a - 1; i >= 0; i--) {
for (j = i - 1; j >= 0; j--) {
printf("*");
}
for (int k = 0; k <= m; k++) {
printf(" ");
}
for (int k = 0; k <= m; k++) {
printf(" ");
}
for (j = i - 1; j >= 0; j--) {
printf("*");
}
printf("\n");
m++;
}
}
첫번째로 짠 것은 단순히 정리하지 않고 순수히
정렬을 했을 때 만들어지는 모양입니다.
갯수가 늘어나면 ++를 이용하였고
줄어들면 --를 이용하여 출력흘 하였습니다.
그리고 해주는 과정 안에서도 계속 l,m을 늘려주어야 하기 때문에
별도로 늘려주는 값을 넣었습니다.
<코드2>
#include <stdio.h>
int main(void){
int N;
scanf("%d", &N);
for(int row=1;row<=N;row++){
for(int star=0;star<row;star++)
printf("*");
for(int blank=0;blank<(N-row)*2;blank ++)
printf(" ");
for(int star=0;star<row;star++)
printf("*");
printf("\n");
}
for(int row=1;row<N;row++){
for(int star=0;star<(N-row);star++)
printf("*");
for(int blank=0; blank<(row*2);blank++)
printf(" ");
for(int star=0;star<(N-row);star++)
printf("*");
printf("\n");
}
return 0;
}
2번째로 한것은 훨씬 깔끔한 코드입니다.
여기서는 빈칸 부분을 다듬었다고 할 수 있습니다.
N-row, row*2를 이용해 --라는 거꾸로 만드는 것을
더욱 편하게 만들어 줄 수 있습니다.
그리고 두번 빈칸 반복되는 것을 *2라는 것을 통해
줄일 수 있습니다.
728x90