
문제 설명
https://www.acmicpc.net/problem/5430
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
배열이 주어지고, R과 D로 이루어진 AC 언어가 주어졌을 때 최종 결과를 구하기
- R : 뒤집기
- D : 맨 앞의 수를 버리기
- 만약 비어있으면 에러 출력
문제 풀이법
R이 들어오면 배열을 뒤집어야 하는데 R이 들어올 때마다 뒤집을 수는 없으니 bool reverse를 통해 뒤집었는지 확인한 후, deque의 특징을 살려 reverse가 true일 때는 뒤에서, false일 때는 앞에서 처리하는 것이 핵심!
- AC 언어를 입력받을 string str
- 주어지는 수의 개수 int n
- 배열을 담을 string arr
- 수를 담을 deque<int> d
- reverse인지 확인하는 bool reverse
- D 연산시 deque가 empty인지 확인하는 bool check
가 필요하다
1. 우선 입력 받을 것들을 다 받아준 후, 배열의 입력 값이 [1,2,3,4] 인 형식이므로 [ , ]가 아닌 경우에만 숫자를 dequq에 넣는다
이때 숫자가 1의 자리만 들어오는 것이 아니니, 여러 자리의 수를 받을 수 있도록 처리를 해준다
2. 명령어에 맞게 처리를 한다
- R : reverse 변수의 값을 뒤집으며, 지금 배열의 상태가 순차적인지, 역순인지 업데이트 해준다
- D
- 만일 deque가 empty라면 오류이니, check의 값을 false로 설정 후 break로 나간다
- reverse가 true라면, 이 배열을 역순 상태이니 역순상태의 맨 앞의 수. 즉, pop_back()을 해준다
- reverse가 false라면, 이 배열은 순차 상태이니 맨 앞의 수. 즉, pop_front()를 해준다
3. 출력한다
- check가 false일 때 : 이 배열은 오류이니 error 출력
- reverse가 true일 때 : 뒤에서부터 출력
- reverse가 false 일 때 : 앞에서부터 출력
소스 코드
#include <iostream>
#include <deque>
using namespace std;
int main()
{
int t;
cin >> t;
while (t > 0)
{
string str, arr;
int n;
cin >> str;
cin >> n;
cin >> arr;
deque<int> d;
bool reverse = false;
bool check = true;
for (int i = 0; i < arr.size(); i++)
{
if (arr[i] != '[' && arr[i] != ']' && arr[i] != ',')
{
int num = 0 ;
while (arr[i] != '[' && arr[i] != ']' && arr[i] != ',')
{
num += (arr[i] - '0');
num *= 10;
i++;
}
num /= 10;
d.push_back(num);
}
}
for (int i = 0; i < str.size(); i++)
{
if (str[i] == 'R')
reverse = !reverse;
else if (str[i] == 'D')
{
if (d.empty())
{
check = false;
break;
}
else
{
if (reverse == true)
d.pop_back();
else
d.pop_front();
}
}
}
if (check == false)
printf("error\n");
else if (reverse == false)
{
printf("[");
for (int i = 0; i < d.size(); i++)
{
printf("%d", d[i]);
if (i != d.size() -1)
printf(",");
}
printf("]\n");
}
else if (reverse == true)
{
printf("[");
for (int i = d.size() - 1; i >= 0; i--)
{
printf("%d", d[i]);
if (i != 0)
printf(",");
}
printf("]\n");
}
t--;
}
return 0;
}
'Algorithm Study' 카테고리의 다른 글
[백준] 3986 좋은 단어 (0) | 2023.01.19 |
---|---|
[백준] 4949 균형잡힌 세상 (0) | 2023.01.19 |
[백준] 1021 회전하는 큐 (0) | 2023.01.17 |
[백준] 10866 덱 (0) | 2023.01.17 |
[백준] 2164 카드2 (0) | 2023.01.17 |