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

(Python/LV2) 과제 진행하기

by windy7271 2023. 4. 8.
728x90
반응형

문제출처: rogrammers.co.kr/learn/courses/30/lessons/176962

 

풀이:

def solution(plans):
    answer = []
    plans = [[int(i[1][:2])*60+int(i[1][3:]),int(i[2]),i[0]] for i in plans]
    plans.sort()
    now, works = 0, []
    for i in plans:
        for j in range(len(works)):
            print(works)
            if works[j][1] == 0:
                continue
            elif i[0] >= now + works[j][1]:
                answer.append(works[j][2])
                now += works[j][1]
                works[j][1] = 0
            else:
                works[j][1] -= (i[0]-now)
                break
        works = [i] + works
        now = i[0]
    for i in works:
        if i[1] != 0:
            answer.append(i[2])
    return answer

 

좀 어렵다

 

answer = []
plans = [[int(i[1][:2])*60+int(i[1][3:]),int(i[2]),i[0]] for i in plans]
plans.sort()
now, works = 0, []

plans 는 시간들을 분으로 바꾸고, 정렬한다.

now 는 현재 시간을 나타낸다.

works 는 아직 다 완료하지 못한 일들을 저장하기 위한것이다.

 

 

 

for i in plans:
    for j in range(len(works)):
        if works[j][1] == 0:
            continue
        elif i[0] >= now + works[j][1]:
            answer.append(works[j][2])
            now += works[j][1]
            works[j][1] = 0
        else:
            works[j][1] -= (i[0]-now)
            break
    works = [i] + works
    now = i[0]

첫 포문으로 plans 에서 가장 먼저 시작하는 일들이 빼주고. 그리고 남아있는 일들이 있는지 확인하는 두 번째 포문을 써준다.

if 문으로 시간을 다 쓴거면 continue

elif if 로 now + 필요한 시간을 더했을때 i[0] 보다 작으면 현재시간에 더해주고, works[j][1] 에 0 을 해준다. 

그 외는 남은시간과, now를 갱신해주고 break 걸어준다.

 

그리고 works , now 최신화

 

for i in works:
    if i[1] != 0:
        answer.append(i[2])
return answer

 

works 에서 0 이 아닌것들 시간이 부족해서 못 끝낸것들 하나하나 꺼내서 더해주면 된다.

 

 

반응형

댓글