4.4. 자료구조.연습문제 왕초보를 위한 Python 문법 익히기 2020-06-07 신달수 0 댓글 0 58 문제 컴퓨터가 몇 대 있고 연산해야할 프로그램도 몇 개 있습니다. 가장 최적화 된 프로그램 대 컴퓨터 분배를 수행할 수 있는 프로그램을 작성하세요. 예) 컴퓨터는 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를 결과로 돌려줍니다. 문제에서 입력과 출력을 아래와 같이 한다고 했는데, 예제에서는 단순하게 리스트와 변수를 입력받고, 리스트를 출력하도록 처리했습니다. 그렇게 하는 것이 간편하고 문제에 집중하는데 도움이 되는 것 같아서요.