10539번: 수빈이와 수열
수빈이는 심심해서 수열을 가지고 놀고 있다. 먼저, 정수 수열 A를 쓴다. 그리고 그 아래에 정수 수열 A의 해당 항까지의 평균값을 그 항으로 하는 정수 수열 B를 쓴다. 예를 들어, 수열 A가 1, 3,
www.acmicpc.net
1. 서론
수식을 활용하는 문제다.
2. 문제 풀이
수열 A가 있다. 그리고 그 수열들이 입력되는 순서대로 그 수열들의 평균을 낸 수열 B가 있다.
예를 들어, 수열 A가 1, 3, 2, 6, 8이라면, 수열 B는 1/1, (1+3)/2, (1+3+2)/3, (1+3+2+6)/4, (1+3+2+6+8)/5, 즉, 1, 2, 2, 3, 4가 된다.
수열 B가 주어졌을 때 수열 A는 어떤 값을 가지는지 맞추는 게 문제다.
그냥 수학적으로 식을 만들어서 풀면 된다. 첫 번째 항은 값이 하나밖에 없어서 평균을 내도 값이 같다.
두 번째부터 식을 만들 수 있는데 수열 B의 두 번째 항이 예시처럼 2라면 수열 A의 두 번째 항을 구하는 식은
a[1] = b[1] * 2 - a[0] 이 된다.
이걸 다른 항에도 적용할 수 있게 바꾸면
a[n] = b[n] * (n + 1) - 수열 A의 누적 합
이런 식으로 식을 만들어서 풀었다.
3. 코드 설명
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, i, x;
int a[100], b[100];
cin >> n;
for (i = 0; i < n; i++)
cin >> b[i];
a[0] = b[0];
x = a[0];
for (i = 1; i < n; i++)
{
a[i] = b[i] * (i + 1) - x;
x += a[i];
}
for (i = 0; i < n; i++)
cout << a[i] << " ";
}
n의 범위가 100까지이기 때문에 100짜리 수열을 만들기 위해 배열 a, b를 만들어준다.
수열 B를 입력받고 위에서 만들었던 식인 'a [n] = b[n] * (n + 1) - 수열 A의 누적 합'를 이용해 문제를 풀었다.
a[0]에 b[0]의 값을 넣어주고 변수 x에 수열 a의 값들을 계속 더해준다.
이렇게 구한 수열 a를 출력해준다.
'Algorithm' 카테고리의 다른 글
[C++] 백준 17389 보너스 점수 (0) | 2021.04.17 |
---|---|
[C++] 백준 15312 이름 궁합 (0) | 2021.04.16 |
[C++] 백준 15969 행복 (0) | 2021.04.16 |
[C++] 백준 1236 성 지키기 (1) | 2021.03.28 |
[C++] 백준 1668 트로피 진열 (0) | 2021.03.27 |