본문 바로가기

코딩테스트/백준

[백준 C++] 5430. AC

문제 링크


 

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를 예제출력의 형식으로 출력해주는 함수입니다.