Programming/Programmers 문제풀이

디스크 컨트롤러

홍열 2020. 12. 24. 10:52
728x90

프로그래머스 사이트에 있는 heap 관련 문제 중에 두번째 문제

 

문제 설명을 하면, 요청시간부터 총 걸린 시간을 알아내고, 평균이 가장 작게 하는 문제

 

문제 구분이 heap이어서 생각하다 보니 heap이 필요할까라는 생각을 해서 list로 무식하게 풀기로함

구현 아이디어

[[0,3], [1,9], [2,6]] 이 들어오면 맨 처음걸 무조건 넣고 시작

[[1,9], [2,6]] 중에서 [0,3] 의 끝나는 시간에서 가장 짧은것을 찾아서 그 다음에 시작

같은 시작이 존재한다면 끝나는 시간이 짧은것을 선택하도록 한다.

 

그렇게 된다면, [0,3], [2,6], [1,9]의 순으로 진행되면 평균이 가장 짧다. 

 

def solution(jobs):
    answer = 0
    length = len(jobs)
    result = []

    result.append(jobs[0])
    jobs.pop(0)

    while jobs:
        minValue = 100000
        temp_list =  []
        pos = 0
        for i, item in enumerate(jobs):
            if result[-1][1] - item[0] < 0: continue

            if result[-1][1] - item[0] < minValue:
                minValue = result[-1][1] - item[0]
                temp_list = item
                pos = i
            elif result[-1][1] - item[0] == minValue:
                if temp_list[1] > item[1]:
                    minValue = result[-1][1] - item[0]
                    temp_list = item
                    pos = i
        result.append(temp_list)
        jobs.pop(pos)
    cur = 0
    for i, item in enumerate(result):
        if i > 0:
            answer += item[1] + cur - item[0]
            cur += item[1]
        else:
            answer += item[1] - item[0]
            cur = answer
    return answer / length

하지만 결과는 ...실패

어디가 틀린것일까?....

런타임 에러도 잡아야하겠지만, 테스트 케이스중에 실패한것이 있어 조금 더 해보기로 한다,.