https://www.acmicpc.net/problem/28278
저번주 벡터로 풀어 봤던 스택문제를 이번엔 배열과 클래스를 이용해서 짜봤다.
근데 출력초과가 뜨는 것이 아닌가? 출력하지 말아야 할 것을 출력하면 뜨는 오류라고 했다. 곰곰히 다시 보니 2번에서 출력오류가 났다.
2번 명령 : 스택에 정수가 있다면 맨 위의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
무슨 오해냐?
나는 맨위를 삭제하고, 나머지 정수를 출력하라고 하는 줄 알았다... 하지만 삭제한 그 애를 출력하라는 얘기였다.
그걸 고치는 시간 초과가 나는 것 아닌가?
저번에 endl 을 개행문자로 바꾸니 해결되어 아래와 같이 수정하니 겨우 통과함..
하지만 아주 만족한다!
계속 C스타일로 짜다가 클래스를 써서 문제 푼 건 처음이라 꽤 만족스럽다.
/*23-09-13*/
#include <iostream>
using namespace std;
class Stack
{
public:
Stack() : Top(0), AryP(nullptr), Capacity(0)
{
const int FirstCapacity = 10;
AryP = new int[FirstCapacity];
Capacity = FirstCapacity;
};
~Stack() { delete[] AryP; };
public:
int GetCount() { return Top; }
/*1번 스택 넣기*/
void PushToStack(int Num)
{
// 맨 처음 시작하면 10개 정도 잡아준다
if (AryP == nullptr)
{
Capacity = 10;
AryP = new int[Capacity];
}
// Top과 용량이 같아지면 용량 2배 늘려준다
if (Top == Capacity)
{
Capacity *= 2;
int* NewAryP = new int[Capacity];
for (int i{ 0 }; i < Top; ++i)
{
NewAryP[i] = AryP[i];
}
delete[] AryP;
AryP = NewAryP;
}
AryP[Top++] = Num;
}
/*2번 스택 정수 있는지 확인 후 맨위 빼고 걔를 출력, 없으면 -1출력*/
void PopTopPrint()
{
if (IsStackEmpty() == true)
{
cout << -1 << '\n';
}
else
{
// 맨 위 정수 제거하고
if (Top > 0)
{
// 그 제거한 애를 출력한다
cout << AryP[Top - 1] << '\n';
Top--;
}
}
}
/*3번 스택 정수 갯수 출력*/
void PrintStackSize()
{
cout << Top << '\n';
}
/*4번 스택 비어있나 확인. 비면 1 아님 0출력. 출력은 밖에서..*/
bool IsStackEmpty()
{
bool IsEmpty{ true };
if (Top == 0)
IsEmpty = true;
else
IsEmpty = false;
return IsEmpty;
}
void PrintEmptyOrNot(bool bEmpty)
{
if (bEmpty == true)
cout << 1 << '\n';
else
cout << 0 << '\n';
}
/*5번 !StaickIsEmpty 면 맨 위 정수top 출력 IsEmpty면 -1출력*/
void CheckStackIsEmpty()
{
if (IsStackEmpty() == true)
cout << "-1" << '\n';
else
{
// 꼭대기 (top-1)
cout << AryP[Top - 1] << '\n';
}
}
private:
int Top; // 스택의 비어있는 곳 = 스택의 크기
int* AryP;
int Capacity; // 배열의 용량(메모리 할당 어느 정도 해주려구)
};
int main()
{
int N{}; // 명령의 수
cin >> N;
int X{}; // 명령
Stack S;
while (N > 0)
{
N--;
cin >> X;
// X에 맞는 함수 불러줘야 함
if (X == 1)
{
int Temp{};
cin >> Temp;
S.PushToStack(Temp);
}
else if (X == 2)
{
S.PopTopPrint();
}
else if (X == 3)
{
S.PrintStackSize();
}
else if (X == 4)
{
S.PrintEmptyOrNot(S.IsStackEmpty());
}
else if (X == 5)
{
S.CheckStackIsEmpty();
}
}
return 0;
}
'백준' 카테고리의 다른 글
[스택] 10773, 벡터 사용한 스택 (0) | 2023.09.08 |
---|---|
[스택 & 벡터] 28278 (0) | 2023.09.05 |
공백 입력..!! (0) | 2023.08.08 |
(2562번)최댓값 찾고 몇 번째 숫자인지 찾기 (2) | 2023.04.19 |
[버블정렬 & 벡터] 10818번 문제 (0) | 2023.04.19 |