백준 - 2444번 별 찍기-7(문자열)

Kiwoong Park·2023년 5월 13일
0

문제

별 찍기 구현하기

C++ 풀이

수식으로 규칙성을 정의하여 코드로 구현하는 방법으로 접근하였다.
이중 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;
}
profile
You matter, never give up

0개의 댓글