2020-10-25
문제
N개의 정수 중 서로 다른 위치의 두 수를 뽑는 모든 경우의 두 수의 곱의 합을 구하라.
예를 들어 N = 3이고 주어진 정수가 2, 3, 4일 때, 두 수를 뽑는 모든 경우는 (2, 3), (2, 4), (3, 4)이며 이때 각각의 곱은 6, 8, 12이다. 따라서 총합은 26이다.
입력
첫 번째 줄에는 입력 받을 정수의 개수 N(2 ≤ N ≤ 100,000)
두 번째 줄에는 N 개의 정수가 주어진다. 이때 입력 받는 정수들의 범위는 0이상 10,000 이하이다.
출력
모든 경우의 곱의 합을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TemplateA {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bf.readLine());
String [] arr = bf.readLine().split(" ");
//주어진 입력값 예시
//(1*2)+(1*3)+(1*4)+(2*3)+(2*4)+(3*4)
//앞의 항이 하나씩 커질수로 뒤에항의 곱해지는 값은 하나씩 적어짐
//(1*(2+3+4))+(2(3*4))+(3*4)
//위처럼 식을 바꿀 수 있음
//위의 내용을 식을 코드로 바꾸면 아래와 같음
int sum = 0;
for(int i = 0; i < n - 1; i++) {
int tempSum = 0;
//앞에 곱해줄 수 i 0, 1, 2 순으로 바뀜
for(int j = i + 1; j < n; j++) {
tempSum += Integer.parseInt(arr[j]);
//더해서 곱해줄 뒤엣수 j i보다 하나 큰값부터 마지막 값가지 더해줌
}
sum += Integer.parseInt(arr[i]) * tempSum;
}
System.out.println(sum);
}
}
출처 링크 : www.acmicpc.net/problem/13900