[알고리즘 스터디] 2주차_스택_코드업 2016

·2022년 11월 14일
0

Algorithm Study

목록 보기
38/77
post-custom-banner

문제 설명

큰 수를 표현할 때 자릿수를 쉽게 구분하기 위해 천단위 구분 기호인 콤마(,)를 사용한다.
어떤 수가 입력되면 천단위 구분 기호를 넣어 그 수를 다시 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 숫자의 길이 n이 입력된다. (1≤n≤200)
둘째 줄에 길이가 n인 숫자가 입력된다.

출력

천단위 구분기호 콤마를 넣어 출력하시오.

코드

#include <iostream>

using namespace std;

enum { eMaxCount = 100001, eInvalid = -1 };

class Stack
{
public:
    Stack()
        : muTopIndex(0u)
        , StackSize(0)
    {
    }

    void Push(int _iData)
    {
        if (eMaxCount <= muTopIndex)
        {
            cout << "Stack overflow!" << endl;
            return;
        }

        StackSize++;
        miarrData[muTopIndex++] = _iData;
    }

    bool IsEmpty(void)
    {
        return -1 == muTopIndex;
    }

    int Size()
    {
        return StackSize;
    }

    int Top(void)
    {
        if (true == IsEmpty())
        {
            cout << "Stack underflow!" << endl;
            return eInvalid;
        }

        return miarrData[muTopIndex];
    }

    void Pop(void)
    {
        if (true == IsEmpty())
        {
            cout << "Stack underflow!" << endl;
            return;
        }

        StackSize--;
        muTopIndex--;
    }

private:
    int             miarrData[eMaxCount];
    unsigned int    muTopIndex;
    int             StackSize;
};

void Recursive(Stack* _Stack, int _Comma, bool First = true)
{
	if (_Stack->Size() < 0)
	{
		return;
	}

	if (_Comma != 0)
	{
		--_Comma;
		std::cout << _Stack->Top();
		_Stack->Pop();
		Recursive(_Stack, _Comma, false);
	}

	else
	{
        if (First == false)
        {
			std::cout << ',';
        }
		_Comma = 3;
		Recursive(_Stack, _Comma, false);
	}
}

int main()
{
    int NumLength = 0;
    char Num[200] = {0, };
    Stack* NewStack = new Stack();

    cin >> NumLength;

    for (int i = 0; i < NumLength; i++)
    {
        cin >> Num[i];
	}

	int Comma = NumLength % 3;

	for (int i = NumLength-1; i >= 0; i--)
	{
        NewStack->Push(Num[i]-'0');
	}

    NewStack->Pop();

	Recursive(NewStack, Comma);
}

post-custom-banner

0개의 댓글