코딩테스트

백준 순서쌍의 곱의 합 13900 PYTHON

choyou831 2024. 8. 13. 21:16

 

 

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

import itertools
import sys
input = sys.stdin.readline
n = int(input())
answer = list(input().split())
check = []
for i in range(len(answer)):
    answer[i] = int(answer[i])
combination = list(itertools.combinations(answer,2))
for i in range(len(combination)):
    check.append(combination[i][0] * combination[i][1])
print(sum(check))

처음 문제를 보고 2가지 경우만 고려하면 되니, 조합을 생각하였다. 하지만 조합으로 문제를 풀게 된다면, 시간초과가 나오게된다.

메모리 초과 오류를 해결하기 위해 규칙을 찾아보기로 했다.

ex) n = 5  1,2,3,4,5가 입력이라면, 어떤식으로 조합이 되나 고려했다.

(1,2),(1,3),(1,4),(1,5)

(2,3),(2,4),(2,5)

(3,4),(3,5)

(4,5) 

경우의 수는 이정도로 나올것이다.

그럼 위의 식에서 규칙을 찾아보면 1*(2+3+4+5) + 2*(3+4+5) + 3*(4+5) + 4*(5) 이런 규칙이 나온다.

그래서 위의 입력값을 모두 더한뒤,초기값을 빼주고 곱해주는것을 반복해주면 된다.

import sys
input = sys.stdin.readline
n = int(input())
answer = list(map(int, input().split()))
sum_answer = sum(answer)
result = 0
for i in range(len(answer)):
    sum_answer -= answer[i]
    result += sum_answer * answer[i]
print(result)