본문 바로가기
프로그래머스/3단계

(Python/LV3) 디스크 컨트롤러

by windy7271 2022. 12. 14.
728x90
반응형

문제 출처: https://school.programmers.co.kr/learn/courses/30/lessons/42627

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

풀이:

 

def solution(jobs):

    lst = sorted(jobs,key=lambda x:(x[1]))
    start = 0
    res = 0
    while lst:
        for i in range(len(lst)):
            if lst[i][0] <= start:
                start += lst[i][1]
                res += start - lst[i][0]
                lst.pop(i)
                break
            if i == len(lst) - 1:
                start += 1

    return res // len(jobs)

 

  아래 if 문은 맨 처음 시작점이 0 이 아닐때 1부터 시작하거나 2부터 시작할때가 있기때문이다.

 

만약 lst 정렬을 했을때 [2,2] ,,, 으로 가면 start 가 0 이므로 2가 부족하므로 if문에 두 번 걸리면서 start 를 2를 만들어준다.

 

start 에는 끝난시간(그다음꺼시작시간) lst[i][0] 에는 시작시간이 들어간다.

[[0, 3], [2, 6], [1, 9]] 로 예시를 들면

처음시작은 0.3 이다 그럼 start 에 3 res 에는 걸린시간 3이 들어간다.

 

그럼 처음 다음시작점은 3이고, 총 쓴시간 은 3이 들어가있다.

그 다음은 (2.6) 인데 1부터 시작할수 있고 총 9의 시간이 든다,

그럼 시작점 3에 6를 더하면 9이고 , 요청시간은 2 이므로 9 - 2 를 해주면 요청부터 종료까지 시간이다.

 

그다음 1.9

시작점 9 에 9를 더하고 / 요청시간은 1초에 걸었으니깐 18-1 > 17이다

 

res 는 (3,7, 17) // 3 을 해주면 9 가 나온다.

 

lst.pop(i) 인 이유는 그냥 맨 왼쪽껄 빼면 [2,2],,,[1,4] 인 경우가 있기 때문.

 

반응형

댓글