별 찍기 구현하기
수식으로 규칙성을 정의하여 코드로 구현하는 방법으로 접근하였다.
이중 for문을 돌면서 n-i + (i//n=몫)2(i%n=나머지) < j < n+i - (i//n=몫)2(i%n=나머지) 만*
를 출력하면 되었다.
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
for(int i=1;i<2*n;i++){
for(int j=1;j<2*n;j++){
if ((j>n-i+(i/n)*2*(i%n)) && (j<n+i-(i/n)*2*(i%n))) cout << '*';
if (j<=n-i+(i/n)*2*(i%n)) cout << ' ';
}
cout<<"\n";
}
}
내 코드처럼 수식을 어렵게 쓰지 않고 절대값을 활용해서 풀었다.
들여쓰기 버전
#include<iostream>
int main(){
int n;
scanf("%d",&n);
n--;
for(int i=-n;i<=n;i++,puts("")) // Ex. n=5 라면 -4 ~ 0 ~ 4까지 총 9번 순회
for(int j=0;j<=2*n-abs(i);j++) // Ex. i=-n이면 0부터 4까지만, i=0이면 0부터 8까지 9번 순회
j<abs(i)?printf(" "):printf("*"); // j가 절대값 i보다 크거나 같을 때만 *를 출력
return 0;
}