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] 인 경우가 있기 때문.
반응형
댓글