Computer Science/Algorithm Problem

백준] 1551 - 수열의 변화

TwinParadox 2018. 2. 4. 14:01
728x90

시간 제한 : 2초

메모리 제한 : 128MB




입력

첫째 줄에 수열의 크기 N과 K가 주어진다. N은 20보다 작거나 같은 자연수이고, K는 0보다 크거나 같고, N-1보다 작거나 같은 자연수이다. 둘째 줄에는 수열이 ‘,’로 구분되어 주어진다.




출력

첫째 줄에 K번 변형한 수열을 ‘,’로 구분하여 출력한다.




소스코드

#include <iostream>
#include <string>
#include <vector>
using namespace std;
void tokenizer(string& str, vector<string>& token, string delimiter)
{
	size_t lastPos = str.find_first_not_of(delimiter, 0);
	size_t pos = str.find_first_of(delimiter, lastPos);
	while (string::npos != pos || string::npos != lastPos)
	{
		token.push_back(str.substr(lastPos, pos - lastPos));
		lastPos = str.find_first_not_of(delimiter, pos);
		pos = str.find_first_of(delimiter, lastPos);
	}
}
int main(void)
{
	vector<string> token;
	string s;
	int n, k, arr[20];
	cin >> n >> k;
	cin >> s;

	tokenizer(s, token, ",");
	for (int i = 0; i < n; i++)
		arr[i] = stoi(token[i]);
	for(int i=1;i<=k;i++)
		for(int j = 0; j < n-i; j++)
			arr[j] = arr[j + 1] - arr[j];
	for (int i = 0; i < n - k - 1; i++)
		cout << arr[i] << ',';
	cout << arr[n - k - 1];
}




Tip

나온 순서대로 다 계산해주기만 하면 되지만, C++을 이용하는 경우 문자열로 입력 받아야 한다는 부분을 고려해야 한다. C++ string을 이용하는 경우엔 tokenizer함수를 별도로 구현해야 한다.

728x90