백준 13900

soss·2022년 11월 17일
0
post-thumbnail

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

n = int(input())
nlist = list(map(int, input().split()))

sum_nlist = sum(nlist)
hap = 0

for i in nlist:
    sum_nlist -= i     
    hap += sum_nlist * i   

print(hap)

시행착오

문제를 보자마자 이중 for문을 이용해 전체탐색을 하는 브루트포스 문제인 줄 알았다. 결과는 당연히 시간초과가 났고 어떻게 풀어야 할 지 생각을 해보다가 도저히 떠오르는 방법이 없어 검색을 해봤다. 알고보니 순서쌍 곱의 합에는 일정한 규칙이 있었고 그 규칙을 이용해 시간을 훨씬 단축할 수가 있었다.

ex)
2 3 4 5 -> (2*3) + (2*4) + (2*5) -> 2(3+4+5)
3 4 5 -> (3*4) + (3*5) -> 3(4+5)

알게된 점

리스트(배열)를 사용하는 수학 문제는 테스트 케이스의 인덱스와 그 값을 미리 적어둔 뒤에 문제를 파악해봐야겠다.

profile
안녕하세요. 복습 목적으로 문제 풀이를 올리고 있습니다.

0개의 댓글