링크 : https://www.acmicpc.net/problem/13975
13975번: 파일 합치기 3
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T개의 테스트 데이터로 이루어져 있는데, T는 입력의 맨 첫 줄에 주어진다.각 테스트 데이터는 두 개의 행으로 주어지는데,
www.acmicpc.net
- 문제
- 소요시간: 11분 30초
- 설계하기(접근방법)
1. 입력받기
이 문제는 그냥 풀면 시간초과가 날 것이다
2. 구현하기
가장 작은 파일 2개를 계속 합산해 나가다 보면
최적의 해를 구할 수 있을 것이다
작은 파일을 항상 앞에 나오도록 하려면
heap 자료구조를 사용해야 한다
즉 입력받은 list를 heapify 한 후
heap의 앞 두 원소
최소1, 최소2를 pop한 후
둘을 더해준다
그 후 heappush를 하여 다시 넣어준다
이 과정에서 발생한 cost는 항상 더해나간다
heap 내의 원소가 1개 남을 때 까지 더한다
3. 출력하기
cost를 출력한다
- 코드(출력)
import sys, heapq
input = sys.stdin.readline
t = int(input())
for i in range(t):
chapter = int(input())
chapter_list = list(map(int, input().split()))
heapq.heapify(chapter_list)
cost = 0
chapter_list.sort()
while len(chapter_list) > 1:
small_1 = heapq.heappop(chapter_list)
small_2 = heapq.heappop(chapter_list)
new = small_1 + small_2
cost += new
heapq.heappush(chapter_list ,new)
print(cost)
- 얻어갈 부분
1. heap을 만들 때 heapify를 통해서 뒤의 펑션들을 편리하게 이용할 수 있다
'알고리즘(백준) > 그리디' 카테고리의 다른 글
[알고리즘/그리디] 2812번 : 크게 만들기 - python (0) | 2024.01.09 |
---|---|
[알고리즘/그리디] 1715번 : 카드 정렬하기 - python (1) | 2024.01.08 |
[알고리즘/그리디] 1863번 : 스카이라인 쉬운거 - python (0) | 2024.01.08 |
[알고리즘/그리디] 2141번 : 우체국 - python (0) | 2024.01.08 |
[알고리즘/그리디] 1092번 : 배 - python (1) | 2024.01.06 |