```
백준10773번 간단한 스택구조 C++로 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 10773번 풀이
- 간단한 스택 정의와 설명
https://www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
백준 10773번 제로는
난이도 매우 쉬움 등급의 문제로서
숫자가 0부터 9까지 테스트 케이스 만큼 나오는데
0이 나오면 숫자를 뺴주고
나머지 숫자일 경우 스택에 넣어줍니다.
최종적으로 스택 내부에 있는 숫자의 합을 출력해주면 됩니다.
스택은 간단하게 이야기하자면
LIFO
마지막으로 들어온 데이터가 제일먼저 나가는 구조입니다.
다시말하면
처음 들어온 사람은 제일 마지막에 나가야 하는 구조입니다.
스택이 궁금하신 분은 아래 링크를 참조 해주시면 됩니다.
스택 - 위키백과, 우리 모두의 백과사전
스택(stack)은 제한적으로 접근할 수 있는 나열 구조이다. 그 접근 방법은 언제나 목록의 끝에서만 일어난다. 끝먼저내기 목록(Pushdown list)이라고도 한다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄
ko.wikipedia.org
30분 정도 위에 링크를 방문하셔서 풀어보시고
안풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
값을 입력받고
입력된 값을 판별하고
0이고 스택이 비지 않으면 스택에서 값을 빼주고
그렇지 않으면 스택에 값을 넣어주고
최종적으로 스택내에 숫자의 합을 출력해주었습니다.
전체 코드는 아래와 같습니다.
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <stack>
// https://www.acmicpc.net/problem/10773
using namespace std;
class CAccountBookStack
{
private:
std::stack<int> accountBookStack;
public:
CAccountBookStack()
{
}
~CAccountBookStack()
{
}
int getInputFromUser()
{
string inputStr;
int retVal;
/* 입력 속도를 줄여서 시간제한을 통과하기 위해서 stringstream 사용*/
std::getline(cin, inputStr);
stringstream ss(inputStr);
ss >> retVal;
return retVal;
}
void processNewNumber(const int inputNumber)
{
if (inputNumber == 0 && accountBookStack.empty() == false)
{
accountBookStack.pop();
}
else
{
accountBookStack.push(inputNumber);
}
}
void printSumOfStack()
{
int result = 0;
while (accountBookStack.empty() == false)
{
result += accountBookStack.top();
accountBookStack.pop();
}
cout << result;
}
};
int main()
{
CAccountBookStack* cAccountBookStack = new CAccountBookStack();
// 값을 입력받는다.
const int testCaseNumber = cAccountBookStack->getInputFromUser();
for (int i = 0; i < testCaseNumber; i++)
{
// 입력되는 수
const int callNumber = cAccountBookStack->getInputFromUser();
// 입력된 값 처리
cAccountBookStack->processNewNumber(callNumber);
}
// stack 내에 있는 모든 값을 더하고 출력, 없는 경우 0 출력
cAccountBookStack->printSumOfStack();
return 0;
}
입력
4
3
0
4
0
결과
0
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩하시길 바랍니다 ~ :)
참조 및 인용
C++ Primer
Introduction to Algorithms
https://codemasterkimc.tistory.com/35
C++ 이론을 배울수 있는 곳 정리
개요 C++을 배우는 책, 강의, 블로그, 링크 등을 공유합니다. (링크 및 간략한 설명을 하였으나 만약 원작자가 링크를 거는것을 원치 않을 경우 연락주시기 바랍니다.) 서적 https://www.amazon.com/Prime
codemasterkimc.tistory.com
https://codemasterkimc.tistory.com/50
300년차 개발자의 좋은 코드 5계명 (Clean Code)
이번 글을 통해 배워갈 내용 좋은 코드(Clean Code)를 작성하기 위해 개발자로서 생각해볼 5가지 요소를 알아보겠습니다. 개요 좋은 코드란 무엇일까요? 저는 자원이 한정적인 컴퓨터 세상에서 좋
codemasterkimc.tistory.com
'C++ > C++ 알고리즘' 카테고리의 다른 글
| 백준 4949번 균형 잡힌 세상(balanced world) C++로 구현해보기 (0) | 2021.08.29 |
|---|---|
| 백준2609번 GCD, LCM 최대공약수, 최소공배수 C++로 구현해보기 (0) | 2021.08.29 |
| 백준 1212번, 1373번, 8진수 2진수로 변환, 2진수 8진수로 변환 C++ (0) | 2021.08.28 |
| 백준1043번 거짓말 C++로 구현해보기 (0) | 2021.08.27 |
| 백준3053번 택시기하학(Taxi Geometry) C++로 구현해보기 (0) | 2021.08.24 |