n = int(input())
arr = []
for _ in range(n) :
arr.append(int(input()))
arr.sort()
for i in range(n-1) :
arr[i+1] = arr[i] + arr[i+1]
res = 0
for i in range(1, n) :
res += arr[i]
print(res)
하하
아니 런타임도 아니고 틀릴것까진 없지않나 하하하
왜지..
항상 작은 크기의 두 카드 묶음을 합쳤을때 최적의 해를 보장한다.
가장 작은 원소를 순차적으로 꺼낼때, heap 을 떠올릴 수 있는가.
heap에 원소들을 넣어서 push와 pop에 O(logN)만큼의 빠르기로 정렬을 활용할 수 있는가
아니 그럼 첨 내가 생각한게 O(NlogN)이고
책 풀이는 시간복잡도가 Heap을 사용해서 O(logN)으로 구현하는거라서
내가 시간복잡도에서 약간 불리한거쥐,,
틀릴것까진 없지않나.......
n=0, n=1, n=2일때의 예외들 때문인가
n=0, n=1, n=2일때의 예외들을 추가했다.
n = int(input())
arr = []
for _ in range(n) :
arr.append(int(input()))
arr.sort()
if len(arr) == 1 : # 원소가 하나일때
print(arr[0])
elif len(arr) == 2 : # 원소가 두개일때
print(arr[0]+arr[1])
else :
# 각 원소를 이전 원소들과 함께 정렬했을때의 연산 횟수로 초기화한다.
for i in range(n-1) :
arr[i+1] = arr[i] + arr[i+1]
# 이렇게 해두고, 모든 원소를 더하면 모든 연산 횟수를 구할 수 있다.
res = 0
for i in range(1, n) :
res += arr[i]
print(res)
테스트케이스들은 통과하는데댕빡친다아놔진짜,,
import heapq
n = int(input())
# heap에 초기 카드 묶음을 모두 삽입
heap=[]
for i in range(n) :
data = int(input())
heapq.heappush(heap, data) # 복잡도 O(logN)
result = 0
# heap에 원소가 1개 남을때까지
while len(heap) != 1 :
# 가장 작은 2개의 카드 묶음 꺼내기
one = heapq.heappop(heap)
two = heapq.heappop(heap)
# 카드 묶음 합쳐서 다시 삽입 (내가 여기서 틀린듯!)
sum_value = one+two
result += sum_value
heapq.heappush(heap, sum_value)
print(result)
one = heapq.heappop(heap)
two = heapq.heappop(heap)
# 카드 묶음 합쳐서 다시 삽입 (내가 여기서 틀린듯!)
sum_value = one+two
result += sum_value
heapq.heappush(heap, sum_value) ################
주어진 테스트케이스로 문제를 파악하는 건 좋지만,,
원칙대로 생각합시다 아니면 좀 애먼 테스트케이스 여러 종류를 미리 떠올려봅시다