난이도 : D2
문제번호 :5177
문제 주소 및 출처입니다.
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
목차
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 |
댓글