times = [5,2,4,3,4,7,9,2,4,1] #작업의 각 수행시간
n = len(times) #작업의 개수
m = 4 #기계의 개수
L = [0] * m #각 기계가 작업할 영역(시간)
for i in range(n): #작업을 하나씩 실행
min = 1
for j in range(m):
if (L[j] < L[min]):
min = j
#작업 i를 기계L[m]에 배정
L[min] = L[min] + times[i]
print("가장 늦게 끝나는 작업시간은: "+str(max(L)))
파이썬 전체 코드 및 실행 이미지
import turtle as t
import random
#랜덤으로 색을 생성
def getRGB():
r, g, b = 0, 0, 0
r = random.random()
g = random.random()
b = random.random()
return (r, g, b)
def draw(L,index,time):
global m,gap,xstart
tmpColor = getRGB()
t.pencolor(tmpColor)
t.fillcolor(tmpColor)
print(L)
#변수지정
x = xstart + L[index]*width
yGap = index*(gap+height)
y = ystart+gap+yGap
graphWidth=width*time
xText,yText = x+(graphWidth/2),y+(height/2)
#그리기
t.goto(x,y)
t.pendown()
t.begin_fill()
t.forward(graphWidth)
t.left(90)
t.forward(height)
t.left(90)
t.forward(graphWidth)
t.left(90)
t.forward(height)
t.left(90)
t.end_fill()
t.penup()
t.goto(xText,y)
t.pencolor(0,0,0)
t.write(time, font=("Arial", 20, "bold")) # 스케쥴링 크기 쓰기
def drawEnd(L):
global m, gap, xstart,ystart
t.speed(0)
t.pencolor(1,0,0)
t.pensize(5)
# 변수지정
x = xstart + max(L) * width
lineLength = m * (gap + height)
# 그리기
t.goto(x, ystart)
t.pendown()
t.left(90)
t.forward(lineLength)
t.penup()
#글씨쓰기
t.goto(x+10, ystart+10)
t.write("max: "+str(max(L)), font=("Arial", 20, "bold")) # 스케쥴링 크기 쓰기
def Approx_JobScheduling(times,m):
#작업의 각 수행시간
n = len(times) #작업의 개수
L = [0] * m #각 기계가 작업할 영역(시간)
for i in range(n): #작업을 하나씩 실행
min = 0
for j in range(m):
if (L[j] < L[min]):
min = j
#작업 i를 기계L[m]에 배정
draw(L,min,times[i]) #min: 해당하는 작업 기계 넘버, times[i]: 더해질값
L[min] = L[min] + times[i]
print("가장 늦게 끝나는 작업시간은" +str(max(L)))
drawEnd(L)
#변수
width = 40
height = 50
gap = 30
times = [5,2,4,3,4,7,9,2,4,1] #작업할 리스트 (요소는 걸리는 시간)
m=4 #기계 총 개수
xstart,ystart= -300, -50 #그래프 최초 시작 원점
#그림 그리는 함수 (배경)
t.penup()
t.goto(xstart, ystart)
t.speed(0)
t.pendown()
t.goto(xstart+600, ystart)
t.setx(xstart)
t.sety(ystart-30)
t.penup()
t.setx(xstart-5)
t.sety(ystart-60)
t.write(0, font=("Arial",15, "bold"))
#시작
# t.shape('turtle')
t.speed(10)
Approx_JobScheduling(times,m)
t.mainloop()
다른 예2
times = [2,2,6,3,10,7,9,2,4,1] #작업할 리스트 (요소는 걸리는 시간)
m=5 #기계 총 개수