seokjin1013   2년 전

먼저 어떤 방식으로 구현했는지 설명 드리겠습니다.

1. 처음에 먼저 오름차순으로 정렬합니다.

2. 두 원소 a, b(a < b)를 뽑아서 a를 최솟값, b를 최댓값이라 생각합니다.

3. a와 b 사이에 있는 원소의 개수를 k라고 할 때, 모든 a, b의 조합에 대한 (b - a) * 2 ^ k의 합으로 답을 구합니다.

6

1 4 5 5 6 10

이 테스트 케이스를 예를 들어서 자세히 살펴보면,

k가 0인 경우는 이렇게 구할 수 있습니다:

(4-1 + 5-4 + 5-5 + 6-5 + 10-6) * 2^0

이 식을 변형하면

((4+5+5+6+10) - (1+4+5+5+6)) * 2^0

4, 5, 5, 6이 사라져 결국

(10-1) * 2^0 이 됩니다.

k가 1인 경우 : (6+10-1-4) * 2^1

k가 2인 경우 : (5+6+10-1-4-5) * 2^2

뒤에서부터 한 칸씩 앞으로 오면서 원소를 더하고, 앞에서부터 한 칸씩 뒤로 가면서 원소를 빼서 구할 수 있습니다.

k가 n - 1인 경우까지 반복해서 다 더하면

9+22+44+88+144 = 307 입니다.

이것을 코드로 구현하였습니다.


반례가 뭘까요? 시작하자마자 틀렸습니다가 나옵니다.

seokjin1013   2년 전

해결했습니다.

댓글을 작성하려면 로그인해야 합니다.