1 분 소요

1. 문제

https://www.acmicpc.net/problem/10539

  • 누적합 사용 문제
// 문제
수빈이는 심심해서 수열을 가지고 놀고 있다.
먼저, 정수 수열 A를 쓴다.
그리고  아래에 정수 수열 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의 길이만큼 정수 N(1  N  100) 주어지고,
둘째 줄에는 수열 Bi를 이루는 N개의 정수가 주어진다. (1  Bi  109)

// 출력
첫째 줄에는 수열 A를 이루는 N개의 정수를 출력한다. (1  Ai  109)

// 예제 입력 1
1
2

// 예제 출력 1
2

// 예제 입력 2
4
3 2 3 5

// 예제 출력 2
3 1 5 11

// 예제 입력 3
5
1 2 2 3 4

// 예제 출력 3
1 3 2 6 8


2. 핵심 아이디어

  • 결과의 첫 항은 입력받은 항의 첫 항과 같음
  • 평균값을 구하는 공식만 알면 구할 수 있음


3. Python 문제풀이

import sys
input = sys.stdin.readline

n, arr = int(input()), list(map(int, input().split()))
result = [arr[0]]

for i in range(1, n) :
  result.append(arr[i] * (i + 1) - sum(result))

for i in result :
  print(i, end = ' ')


4. Java 문제풀이

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] arr = new int[n];
		int[] result = new int[n];

		for (int i=0; i<arr.length; i++) {
			arr[i] = sc.nextInt();
		}

		int sum = 0;	// 수열 A의 합

		for (int i=0; i<arr.length; i++) {
			result[i] = arr[i] * (i+1) - sum;
			sum += result[i];
		}

		for (int i=0; i<result.length; i++) {
			System.out.print(result[i] + " ");
		}
	}
}

댓글남기기