https://www.acmicpc.net/problem/1551
문제
> 크기가 N인 수열A가 주어졌을때 인접한 두 원소의 차이를 이용해 크기가 N-1인 수열B를 만들 수 있다.
> A = {5,6,3,9,-1}, B = {6-5,3-6,9-3,-1-9} = {1,-3,6,-10} 즉 B[i] = A[i+1] - A[i]이다.
> 수열 A가 주어졌을때 이를 K번 했을때 나오는 수열을 구해라.
접근
N과 K, 수열A를 입력받고 문제에 주어진 수식을 적용해 K번 반복한다.
문제해결
> N과 K를 입력받고 벡터 배열A에 넣는데 ,를 제거하며 입력받는다.
> K가 0이거나 N이 1일땐 수식을 적용할 수 없으므로 따로 경우를 빼서 처리해준다.
> 나머지 경우는 문제에서 준 수식에 넣어 처리한다.
> 출력할때 마지막 인덱스 전까진 , 를 출력하고 마지막엔 값만 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N, K;
cin >> N >> K;
vector<int> A(N);
for (int i = 0; i < N; i++)
{
cin >> A[i];
if (i != N - 1)
cin.ignore(1, ',');
}
if (K == 0 || N == 1)
{
for (int j = 0; j < N; j++)
{
if (N - j > 1)
cout << A[j] << ",";
else
cout << A[j];
}
}
else
{
for (int i = 0; i < K; i++)
{
vector<int> B;
for (int j = 0; j < A.size() - 1; j++)
{
B.push_back(A[j + 1] - A[j]);
}
A = B;
}
for (int t = 0; t < A.size(); t++)
{
if (A.size() - t > 1)
cout << A[t] << ",";
else
cout << A[t];
}
}
}

후기
정작 코드는 10분도 안돼서 썼는데 입력형식의 콤마와 출력의 콤마.. 그놈의 콤마 때문에 몇시간 걸렸다.
ignore()의 존재를 처음 알게되었다. 입력의 특정 문자를 제거하며 받아준다.
문자열로 입력받아 숫자로 변환해서 할 수 있지만 왠지 오기가 생겨 죽어도 숫자로 처리하고싶었다..