import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] a = new int[n]; // 일반 정수배열
int[] b = new int[n]; // a배열의 n번까지의 합을 n으로 나눈 값을 저장할 배열
int sum; // a배열에서 n번째까지의 합
for (int i = 0; i < n; i++) {
b[i] = sc.nextInt();
}
a[0] = b[0]; // a[0]은 a[0]까지의 값은 한번 나눈 값이므로 초기화 해줌
sum = a[0]; // sum 또한 a[0]을 제외하고 누적된 값이 없으므로 초기화
for (int j = 1; j < n; j++) {
a[j] = (b[j] * (j + 1)) - sum; // 누적된값+a[n]/n = b[n]에서 a[n]을 왼쪽에 놓고 모든 값을 오른쪽으로 넘김. 미지수 x구하는 방법
sum += a[j]; // sum에 누적값 계산
}
for (int s = 0; s < n; s++) {
System.out.print(a[s] + " ");
}
}
}
a배열에는 일반 정수가 들어가고, b배열에는 a배열에서 0~j번째까지의 정수의 합을 n까지의 정수갯수로 나눈 값이 j번쨰에 들어가게 된다.
문제는 b배열의 값이 주어지고 a배열을 구하라는 문제이다.
아이디어는 먼저 a[0]을 1로 나누어 봤자 b[0]이기 때문에 a[0]=b[0]을 해주었다. 그리고 sum으로 누적값을 계산하였다.
sum은 a배열의 j-1까지의 합이니, sum+a[j]을 j번까지의 총 합이된다. 몇번째 숫자인지 j+1을 사용하여 나눠주면 그 값은 b[j]이 된다. 결국 공식은 sum+a[j]/j+1=b[n]이 되는데 여기서 좌항에는 a[j]만 남겨두고 모두 우항에 넘겨준다. 그러면 a[j]값을 구할 수 있다. 방정식에서 x를 좌항에 놔두고 모두 우항에 넘겨서 x값을 구하는 것처럼 풀었다.
'알고리즘 문제' 카테고리의 다른 글
[알고리즘 문제] (0) | 2019.04.08 |
---|---|
[알고리즘 문제] attackRange (0) | 2019.04.08 |
[알고리즌 문제] BeeHive (0) | 2019.04.06 |
[알고리즘 문제] Seat (0) | 2019.04.04 |
[알고리즘 문제] Tetris (0) | 2019.04.03 |