[C++] 백준 10539 수빈이와 수열
2021. 4. 16.
반응형

www.acmicpc.net/problem/10539

 

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
myoskin