난이도 : D2
문제번호 :5177
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
이진 최소힙은 다음과 같은 특징을 가진다. 이때 마지막 노드인 6번의 조상은 3번과 1번 노드이다. |
입력
첫 줄에 테스트케이스의 수 T가 주어진다. 1<=T<=50 |
출력
각 줄마다 "#T" (T는 테스트 케이스 번호)를 출력한 뒤, 답을 출력한다. |
예시
입력 | 출력 |
3 6 7 2 5 3 4 6 6 3 1 4 16 23 12 8 18 57 11 52 14 45 63 40 |
#1 7 #2 5 #3 65 |
2. 문제풀이
여러가지 삽질을 해서 풀었던 문제입니다. 처음 문제의 발생은 이후 11이 들어올때입니다. 11이 들어옴으로써 규칙이 깨지게 됩니다. 부모가 자식노드보다 작아야 함으로 11과 18을 바꿔줍니다. 52 역시 들어오면 부모가 더 크기때문에 바꿔줍니다. 14 역시 부모노드보다 작으므로 교체를 해줍니다. 45, 63은 이상없이 추가되게 됩니다. 마지막으로 추가되는 40입니다. 역시 부모보다 작으므로 교체를 해줍니다. 이것이 힙의 최종적인 모습이 되게됩니다. |
3. 소스코드
def insert_heap(data):
heap.append(data)
index = len(heap)-1
while index > 1 and heap[index] < heap[index//2]:
heap[index], heap[index//2] = heap[index//2], heap[index]
index //= 2
def get_sum_heap():
value = 0
idx = N // 2
while idx:
value += heap[idx]
idx //= 2
return value
for t in range(int(input())):
answer = 0
N = int(input())
user_input = list(map(int, input().split()))
heap = [0]
for data in user_input:
insert_heap(data)
answer = get_sum_heap()
print('#{} {}'.format(t+1, answer))
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
사칙연산 Python(SW Expert Academy) (0) | 2021.04.05 |
---|---|
길찾기 Python(SW Expert Academy) (0) | 2021.02.24 |
오목 판정 Python(SW Expert Academy, SWEA) (0) | 2021.02.23 |
진기의 최고급 붕어빵 Python(SWEA) (0) | 2021.02.21 |
현주의 상자 바꾸기 Python(SWEA) (0) | 2021.02.19 |
댓글