사용자 도구

사이트 도구


ps:problems:boj:13974

파일 합치기 2

ps
링크acmicpc.net/…
출처BOJ
문제 번호13974
문제명파일 합치기 2
레벨플래티넘 2
분류

그리디

시간복잡도O(n^2) ( Optimal: O(nlogn) )
인풋사이즈n<=5000
사용한 언어Python
제출기록29284KB / 808ms
최고기록772ms
해결날짜2021/03/03

풀이

코드

"""Solution code for "BOJ 13974. 파일 합치기 2".

- Problem link: https://www.acmicpc.net/problem/13974
- Solution link: http://www.teferi.net/ps/problems/boj/13974
"""

import itertools
import sys

INF = float('inf')


def insert_rec(size, pos, l):
    cost = 0
    while len(l) + pos > 2 and size >= l[pos - 2]:
        new_size = l.pop(pos - 1) + l.pop(pos - 1)
        new_pos = next(x for x in range(pos - 1, -(len(l) + 1), -1)
                       if l[x] >= new_size) + 1
        cost += new_size + insert_rec(new_size, new_pos, l)
    if pos == 0:
        l.append(size)
    else:
        l.insert(pos, size)
    return cost


def main():
    T = int(sys.stdin.readline())
    for _ in range(T):
        K = int(sys.stdin.readline())  # pylint: disable=unused-variable
        file_sizes = [int(x) for x in sys.stdin.readline().split()]

        l = [INF]
        cost = 0
        for size in itertools.chain(file_sizes, [INF]):
            cost += insert_rec(size, 0, l)

        print(cost)


if __name__ == '__main__':
    main()

토론

댓글을 입력하세요:
J X X H᠎ I
 
ps/problems/boj/13974.txt · 마지막으로 수정됨: 2021/03/09 10:17 저자 teferi