질문이 있으십니까?

기본 컨텐츠 및 사용자가 직접 참여하여 만들어진 다양한 내용을 검색합니다.

4.4. 자료구조.연습문제

문제

컴퓨터가 몇 대 있고 연산해야할 프로그램도 몇 개 있습니다. 가장 최적화 된 프로그램 대 컴퓨터 분배를 수행할 수 있는 프로그램을 작성하세요.
예) 컴퓨터는 2대가 있고, 프로그램의 수행시간은 각 3분, 5분, 2분이라면, 컴퓨터 하나는 3분, 2분짜리 프로그램을 수행하고 다른 컴퓨터는 5분짜리 프로그램을 수행하면 됩니다.
입력
    computer : 2
    program : 3, 5, 2
출력
    computer1 : 5
    computer2 : 3, 2

해법 1

프로그램들을 전부 수행하는 데 걸리는 총수행시간을 구한다.
총수행시간을 컴퓨터 대수로 나누어 각각의 컴퓨터의 평균수행시간을 구한다.
만약 평균수행시간보다 더 오래 걸리는 프로그램이 있으면:
    그냥 컴퓨터에게 준다.
평균 수행시간보다 짧게 걸리는 것들은:
    평균수행시간만큼 모아서 컴퓨터에게 준다.

해법 2

바구니를 준비한다.
바구니에 담을 빵들을 크기순으로 정렬한다.
빵을 모두 바구니에 담을 때까지:
    가장 가벼운 바구니에 가장 큰 빵을 담는다.
결과를 돌려준다.
# prg2com.py

def prg2com(inlist, coms):
    outlist = []
    sumout = []
    for x in range(coms):
        outlist.append([])
        sumout.append(0)

    inlist.sort(reverse=True) #바구니에 담을 빵들을 크기순으로 정렬

    for bread in inlist: #각각의 빵을 바구니로 분배
        lowbasket = sumout.index(min(sumout))
        outlist[lowbasket].append(bread)
        sumout[lowbasket] += bread

    return outlist

print prg2com([3,15,6,22,13,2], 3)
프로그램을 전체적으로 보면 prg2com()이라는 함수를 하나 정의해두고, 맨 마지막 줄에서 그 함수를 호출하는 형태입니다. 그리고, prg2com() 함수는 inlist와 coms라는 두 개의 인자를 받아서, outlist를 결과로 돌려줍니다.
문제에서 입력과 출력을 아래와 같이 한다고 했는데, 예제에서는 단순하게 리스트와 변수를 입력받고, 리스트를 출력하도록 처리했습니다. 그렇게 하는 것이 간편하고 문제에 집중하는데 도움이 되는 것 같아서요.

댓글을 작성하세요

문서 이력

  • 2020-06-07 날짜로 신달수 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-06-09 날짜로 신달수 님께서 등록 작업을 하였습니다.