10828: 스택(백준)
2021. 9. 19. 00:34ㆍ문제연습/알고리즘
반응형
문제 해결 과정)
일단 main에 모든 기능을 작성하면 코드가 굉장히 더러워집니다...
사용 언어는 C++이므로 클래스를 이용해 구현하였으며 코드는 아래와 같습니다.
#include <iostream>
#include <string>
using namespace std;
class Stack {
public:
int array[10000]; //배열기반으로 구현. 시스템 보안상 권장하지 않는 방식
int up;
int bottom;
Stack() {
up = -1;
bottom = 0;
}
void push(int num) {
if (top() == 10000) //허용된 범위 이상으로 연산 시도시 overflow 처리
cout << "stack overflow!!!";
array[++up] = num;
}
int pop() {
if (top() == -1)
return -1;
else
return array[up--];
}
int size() {
return up - bottom + 1;
}
int empty() {
if (top() == -1)
return 1;
else
return 0;
}
int top() {
if (up == -1)
return -1;
else
return array[up];
}
};
이제 이 Stack 클래스를 활용해 입력값을 처리하는 main 부분의 코드를 작성해 보도록 하겠습니다.
int main() {
Stack first;
string Opr;
int count;
int input;
cin >> count;
for (int i = 0; i < count; i++) {
cin >> Opr;
if (Opr == "push") {
cin >> input;
first.push(input);
}
else if (Opr == "pop")
cout << first.pop()<<endl;
else if (Opr == "size")
cout << first.size()<<endl;
else if (Opr == "empty")
cout << first.empty()<<endl;
else if (Opr == "top")
cout << first.top()<<endl;
else
cout << "input error!!!"<<endl;
}
return 0;
}
이제 컴파일 후 테스트 한 결과와 백준 테스트 결과를 확인하면 다음과 같습니다.
정상적으로 동작함을 알 수 있습니다.
하지만 기능만 제대로 구현이 됐을 뿐 내부적인 메모리 문제와 같은 인지하지 못한 Issue가 존재할 수 있습니다.
C++ 코드 정적 분석 검사 도구인 CppChecker를 이용해 자동화 점검을 진행해 보도록 하겠습니다.
흠... 일단 배열의 크기가 조금 걸렸었는데 여기서는 문제가 없다고 합니다.
(또한 Visual Studio에서는 추가적으로 클래스 멤버인 배열도 생성자를 통해 초가화하라고 경고 창이 떴는데 아무래도 어떤 다른 문제가 존재하는 것 같습니다.)
다음에 기회가 된다면 다른 점검 도구로 확인해 봐야 되겠네요...
반응형
'문제연습 > 알고리즘' 카테고리의 다른 글
2164: 카드 2(백준) (0) | 2021.09.29 |
---|---|
10733: 제로(백준) (0) | 2021.09.19 |
3. Brute Force (1) (0) | 2020.02.22 |
2. 시뮬레이션 (0) | 2020.02.10 |
1. 탑코더 문제 풀이 준비 (0) | 2020.02.09 |