@ 바람개비 떡밥

이제는 바야흐로 삼각형 별찍기의 시대가 가고 바람개비 별찍기의 시대가 오나보다.

이걸 뭐 for문을 2개 쓰니 4개 쓰니 말이 많은데, 어거지를 발휘하면 2개로 가능하다.
(물론 패턴 분석이 필요하지만...)

여러 방법이 있을 것 같은데, 직관적인 방법은 삼각형 4개를 쪼개서 각각을 생각하는 것인 것 같다.
그래서 사분면을 나누고, 각 사분면에 따라 *을 찍느냐 공백을 찍느냐를 판별하였다.
#include 
#include 
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	int size;
	cout << "Enter a size:" << endl;
	cin >> size;

	for( int i = 0 ; i < 2 * size ; i++)
	{
		for( int j = 0 ; j < 2 * size ; j++)
		{
			int iQuadrant = 1;

			// 사분면 판정
			if( i < size && j <= size )
				iQuadrant = 1;
			else if( i < size && j < size )
				iQuadrant = 2;
			else if( i >= size && j < size )
				iQuadrant = 3;
			else
				iQuadrant = 4;

			// 사분면에 따라 '*' 인지 ' ' 인지 결정하는 로직이 다름
			switch( iQuadrant )
			{
			case 1:
				if( ( (j - size) - (size - 1) + i) >= 0 )
					cout << "*";
				else
					cout << " ";

				break;

			case 2:
				if( i > j )
					cout << " ";
				else
					cout << "*";

				break;

			case 3:
				if( ( (i - size) - (size - 1) + j) <= 0 )
					cout << "*";
				else
					cout << " ";
				break;

			case 4:
				if( (i - size) < (j - size) )
					cout << " ";
				else
					cout << "*";

				break;

			}

		}

		cout << endl;
	}

	return 0;
}
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Heart