📖 스택/큐 > 기능개발

  • 먼저 개발되어도 배포는 앞의 기능이 배포될 때 가능
  • 배포는 하루에 한 번 가능

📖What I thought

  • 완성되었어도 앞 순서의 기능이 완성되지 않았으면 배포 불가능 → FIFO → queueprogresses를 큐로 사용하자
  • 기능에 작업 속도를 loop 돌면서 계속 + 해줌 가장 앞 원소가 100% 넘으면 배포 가능 → progresses 앞에서부터 100% 아닐 때까지 pop → speeds도 까먹지 말구 잘라주자!
  • 이 때, pop된 갯수만큼 한 번에 배포된 기능이니까 정답 리스트에 추가 → cnt변수 만들기

📖풀이

📎queue #1

def solution(progresses, speeds):
    answer = []
 
    while progresses:
        progresses = [p+s for p, s in zip(progresses, speeds)]
 
        cnt = 0
        while len(progresses) !=0 and progresses[0] >= 100:
            cnt += 1
            progresses.pop(0)
            speeds.pop(0)
        
        if cnt != 0:
            answer.append(cnt)
            
    return answer

📎queue #2

def solution(progresses, speeds):
    answer = []
 
    day = 1
    cnt = 0
    while progresses:
        if (progresses[0] + speeds[0]*day) >= 100:
            progresses = progresses[1:]
            speeds = speeds[1:]
            cnt+=1
        
        else:
        # 가장 앞이 진도율 100%가 아닌데 cnt가 0이 아니라구라구라??
        # 전 날 cnt개의 기능 배포 되었단거네
            if cnt != 0:
                answer.append(cnt)
                cnt = 0
            # 첫번째 기능이 진도 100%이 아니면서 전 날 배포된 기능도 없다구?? 하루 더 일해라
            day += 1
 
    answer.append(cnt)
 
    return answer
  • 실제 배포가 며칠 날 일어났는지도 알 수 있음
  • 굳이 progresses의 값을 직접 바꾸는 것이 아니라 날짜만큼의 진행도를 매번 더해서 100% 넘는지 확인
  • 넘을 때마다 cnt++해주고 그 프로세스 제거 if
  • 100% 안 넘으면 else → 이 안에서 이미 완성된 친구들 count가 있으면 answer에 추가

📖What I learned

  1. 작업들의 순서에 대한 언급이 있다면 stack, queue를 생각하자!

📖관련 지식

📎Queue