#include <iostream>
#include <string>
#include <list>
using namespace std;
// 에디터_1406_백준
int main()
{
// 0. 입출력 속도를 향상 시킨다.
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 1. 문자열을 입력 받는다
string s; // 문자열
cin >> s;
// 2. 명령어의 개수를 입력 받는다.
int M;
cin >> M;
// 3. 명령어를 처리한다.
list<char> lst(s.begin(), s.end());
list<char>::iterator cursor = lst.end();
//string::size_type cursor = s.size() - 1;
while (M--)
{
// 3-1. 명령어를 입력 받는다.
char op;
cin >> op;
// 3-2. 각 명령어에 맞게 실행한다.
switch (op)
{
case'L':
if (cursor != lst.begin())
{
--cursor;
}
break;
case'D':
if (cursor != lst.end())
{
++cursor;
}
break;
case'B':
// 문자를 지운 후 커서 위치 업데이트 필요함.
if (cursor != lst.begin())
{
--cursor;
cursor = lst.erase(cursor);
}
break;
case'P':
// 문자를 추가하기 전에 위치를 업데이트 해줘야 함.
char param;
cin >> param;
cursor = lst.insert(cursor, param);
cursor++;
break;
}
}
// 4. 출력
for (list<char>::iterator iter = lst.begin(); iter != lst.end(); iter++)
{
cout << *iter;
}
}
#include <iostream>
#include <string>
#include <list>
#include <vector>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int TestCase;
cin >> TestCase;
while (TestCase--)
{
// 1. 문자열을 입력 받는다.
string input;
cin >> input;
//for (char ch : input) { 컨테이너를 수정하면 안된다. -> 컨테이너에 데이터를 삭제, 삽입하면 안된다. }// 모든 문자열 순회
// 2. 컨테이너 2개를 받는다
// 2-1. 하나는 커서 왼편에 존재하는 문자열로 정방향으로 저장
// 2-2. 다른 하나는 커서 오른편에 존재하는 문자열로 역방향으로 저장
vector<char> left, rightReversed;
// 3. 각 문자열을 적절하게 처리한다.
// 알파벳 대소문자, 숫자, 백스페이스(-), 화살표(<>)
for (char ch : input)
{
switch (ch)
{
case '<':
if (false == left.empty())
{
rightReversed.push_back(left.back());
left.pop_back();
}
break;
case '>':
if (false == rightReversed.empty())
{
left.push_back(rightReversed.back());
rightReversed.pop_back();
}
break;
case '-':
if (false == left.empty())
{
left.pop_back();
}
break;
default:
left.push_back(ch);
break;
}
}
cout << string(left.begin(), left.end()) << string(rightReversed.rbegin(), rightReversed.rend()) << "\\n";
}
}
: 연산이 한 쪽 끝에서만 이뤄지는 자료구조
#include <iostream>
#include <string>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int stack[100000] = { 0 };
int Wherecount = 0;
// 1. 명령의 수
int input;
cin >> input;
// 2. 명령 입력 (1 <= M <= 100,000)
for (int i = 0; i < input; i++)
{
int push_input;
string command;
cin >> command;
if (command == "push")
{
cin >> push_input;
stack[Wherecount] = push_input;
Wherecount++;
}
else if (command == "pop")
{
if (stack[0] == NULL)
{
cout << "-1\\n";
}
else
{
cout << stack[Wherecount -1] << "\\n";
stack[Wherecount-1] = NULL;
Wherecount--;
}
}
else if (command == "size")
{
cout << Wherecount << "\\n";
}
else if (command == "empty")
{
if (stack[0] == NULL)
{
cout << "1\\n";
}
else
{
cout << "0\\n";
}
}
else if (command == "top")
{
if (stack[0] == NULL)
{
cout << "-1\\n";
}
else if(stack[Wherecount-1] != NULL)
{
cout << stack[Wherecount - 1] << "\\n";
}
}
}
}
#include <iostream>
#include <string>
using namespace std;
int Money[1000000] = { 0 };
// 숫자가 입력된다.
// 잘못된 숫자가 나오면 0을 입력하여 top 숫자를 지운다.
// 처음부터 끝까지의 총 합을 구하라.
// ex) 4(테스트 횟수) 3 -> 0(3지움) -> 4 -> 0(4지움) = 0 이 된다.
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 1. 반복할 횟수 K를 입력한다.
int K;
cin >> K;
// 2. 배열 선언
int Where = 0; // 위치
// 2-1. 돈 입력
int InputMoney = 0; // 입력한 돈
int sumMoney = 0; // 다 더한 값
// 2-2. 0을 카운트 해서 뒷부분에 0 있어도 count 더해짐
int zeroCount = 0;
// 3. 횟수 만큼 반복하는 반복문
for (int i = 0; i < K; i++)
{
cin >> InputMoney;
Money[Where] = InputMoney;
Where++;
}
// 0 뒷 숫자들을 삭제
for (int j = K - 1; j >= 0; j--)
{
if (Money[j] == 0)
{
zeroCount++;
}
else if (zeroCount > 0)
{
Money[j] = 0;
zeroCount--;
}
}
// 4. 더한값 출력
for (int i = 0; i < K; i++)
{
sumMoney += Money[i];
}
cout << sumMoney << "\\n";
}
#include <iostream>
#include <string>
using namespace std;
// 0. 괄호 배열
string VPS;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// 1. 입력 개수 (TestCase)
int T = 0;
cin >> T;
// 1-1. 카운트
// 개행문자 없애주는 애
std::cin.ignore();
for (int i = 0; i < T; i++)
{
int count1 = 0;
int count2 = 0;
bool a = false;
std::getline(std::cin, VPS);
for (int i = 0; i < VPS.size();++i)
{
if (VPS[i] == '(')
{
count1++;
}
else if (VPS[i] == ')')
{
count2++;
if (count2 > count1)
a = true;
}
}
if (count1 == count2 && a == false)
{
cout << "YES\\n";
}
else
{
cout << "NO\\n";
}
}
}