문제 링크
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
접근 방법
R 함수가 많은 경우 시간초과가 안나도록 합니다.
소스 코드
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
void init_deque(deque<string>& num, string input)
{
string tmp;
num.clear();
tmp.clear();
for (int i = 1; input[i] != ']'; i++)
{
if (input[i] == ',')
{
num.emplace_back(tmp);
tmp.clear();
}
else // ,가 나오기 전까지는 하나의 수로 취급합니다.
tmp.push_back(input[i]);
}
if (!tmp.empty()) // ']' 가 나오기 직전 수를 넣어줍니다.
num.emplace_back(tmp);
}
void print_deque(deque<string> &num)
{
int size = num.size() - 1;
cout << "[";
for (int i = 0; i < size; i++)
cout << num[i] << ",";
if (size >= 0)
cout << num[size];
cout << "]\n";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
deque<string> num;
string input, instruction;
int t, size, instructLen, errFlag, revFlag;
cin >> t;
while (t--)
{
cin >> instruction >> size >> input;
errFlag = 0;
revFlag = 0;
init_deque(num, input);
instructLen = instruction.length();
for (int i = 0; i < instructLen; i++)
{
if (instruction[i] == 'R')
revFlag = !revFlag;
else if (size--)
{
if (revFlag) // 뒤집혀 있으면 마지막 인덱스가 0번째 인덱스 입니다.
num.pop_back();
else
num.pop_front();
}
else // size가 0일때
{
errFlag = 1;
break;
}
}
if (!errFlag && revFlag)
reverse(num.begin(), num.end());
if (errFlag)
cout << "error\n";
else
print_deque(num);
}
return 0;
}
코드 설명
변수
revFlag는 순서를 뒤집을지 결정하는 변수이고, errFlag는 에러를 출력할지 결정하는 변수입니다.
instruction은 실행할 함수들이고 input은 정수 배열을 받는 string입니다.
코드
R 함수가 나올 때마다 배열을 실제로 뒤집어주면 시간이 오래 걸립니다.
따라서 R함수가 나올 때 revFlag를 true와 false로 바꿔줍니다.
함수들을 다 실행하고 난 후 revFlag가 true이면 뒤집어줍니다.
revFlag가 true일 때 D함수를 실행시키면 배열의 맨 뒤의 값을 삭제합니다.
배열이 비어있는데 D함수를 실행시키려고 하면 errFlag를 true로 바꿉니다.
init_deque함수는 input에서 숫자만 가져와 deque를 초기화합니다.
print_deque함수는 deque를 예제출력의 형식으로 출력해주는 함수입니다.
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 C++] 2470. 두 용액 (0) | 2024.03.08 |
---|---|
[백준 C++] 3273. 두 수의 합 (0) | 2024.03.08 |
[백준 C++] 18111. 마인크래프트 (0) | 2023.05.13 |
[백준 C++] 24267. 알고리즘 수업 - 알고리즘의 수행 시간 6 (0) | 2023.05.08 |
[백준 C++] 24266. 알고리즘 수업 - 알고리즘의 수행 시간 5 (0) | 2023.04.30 |