BOJ 5430 C++
코드
#include <bits/stdc++.h>
#define ll long long
using namespace std;
#define X first
#define Y second
/**
* 함수 printResult: 결과 출력 함수
* @param cr 뒤집는 연산 횟수
* @param dq 덱
*/
void printResult(int cr, deque<int>& dq)
{
if (cr & 1) // 뒤집는 연산 횟수가 홀수인 경우
{
cout << '[';
int dsize = dq.size();
for (int i = 0; i < dsize; i++)
{
cout << dq.back();
dq.pop_back();
if (i != dsize - 1)
cout << ",";
}
cout << "]\n";
}
else // 뒤집는 연산 횟수가 짝수인 경우
{
cout << '[';
int dsize = dq.size();
for (int i = 0; i < dsize; i++)
{
cout << dq.front();
dq.pop_front();
if (i != dsize - 1)
cout << ",";
}
cout << "]\n";
}
}
int main(void) {
ios::sync_with_stdio(false); // 입력과 출력을 빠르게 하기 위한 설정
cin.tie(NULL); // cin과 cout의 동기화 제거
int t; cin >> t; // 테스트 케이스의 개수 입력
while (t--)
{
string command; cin >> command; // 동작 명령어 입력
int n; cin >> n; // 배열의 크기 입력
string s; cin >> s; // 배열 요소를 문자열로 입력
int len = s.length();
string tmp;
deque<int> dq;
for (int i = 0; i < len; i++)
{
if (!isdigit(s[i])) // 숫자가 아닌 경우
{
if (!tmp.empty())
{
dq.push_back(stoi(tmp)); // 임시 문자열을 숫자로 변환하여 덱에 넣음
tmp.clear(); // 임시 문자열을 비움
}
}
else // 숫자인 경우
{
tmp += s[i]; // 임시 문자열에 숫자를 추가
}
}
int cr = 0; // 뒤집는 연산 횟수
bool flag = 0; // error 체크
int clen = command.length();
for (int i = 0; i < clen; i++)
{
if (command[i] == 'R') // R 명령어인 경우
{
cr++; // 뒤집는 연산 횟수 증가
}
else // D 명령어인 경우
{
if (dq.empty()) // 덱이 비어있는 경우 오류
{
flag = 1; // error 플래그를 세움
break;
}
if (cr & 1) // 뒤집는 연산 횟수가 홀수인 경우
{
dq.pop_back(); // 덱의 마지막 요소 제거
}
else // 뒤집는 연산 횟수가 짝수인 경우
{
dq.pop_front(); // 덱의 첫 번째 요소 제거
}
}
}
if (flag == 1)
{
cout << "error\n"; // error가 발생한 경우 "error" 출력
continue;
}
printResult(cr, dq); // 결과 출력
}
return 0;
}
문자열 파싱처리가 중요한 덱 활용 문제였습니다.
골드5치고는 쉬운 문제라고 생각이 드네요.
Leave a comment