15824번 - 너 봄에는 캡사이신이 맛있단다
먼저 어떤 방식으로 구현했는지 설명 드리겠습니다.
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년 전 1
먼저 어떤 방식으로 구현했는지 설명 드리겠습니다.
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 입니다.
이것을 코드로 구현하였습니다.
반례가 뭘까요? 시작하자마자 틀렸습니다가 나옵니다.