[프로그래머스] 기능개발

이경민·2023년 1월 4일
0

스택/큐

목록 보기
4/4

✅ 목적

  • progresses: 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열
  • speeds: 각 작업의 개발 속도가 적힌 정수 배열
  • 각 기능은 진도가 100%가 넘으면 배포 가능

각 배포마다 몇 개의 기능이 배포되는지를 반환
(단, 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있으며
이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포된다.)

✅ 아이디어

  1. 각 기능별로 "(100-현재 작업의 진도)/개발 속도" 를 계산하여 배포까지 남은 작업일수를 arr 리스트에 저장
    (단, 일의 자리까지 올림)
  2. A 기능이 배포될 때 바로 뒤에 있는 B 기능도 배포가 가능할 경우:
    (A 기능의 남은 작업일수 >= B 기능의 남은 작업일수)
    n에 1을 더해주어 함께 배포 가능한 기능의 개수를 계산해 answer 리스트에 원소를 추가하고자 한다.

❗정확성 O

def solution(progresses, speeds):
    answer = []
    arr = []
    
    for i in range(len(progresses)): # 기능별 남은 작업일수 계산
        a = 100-progresses[i]
        if a % speeds[i] == 0:
            a = a//speeds[i]
        else:
            a = a//speeds[i] + 1    
        arr.append(a)
    
    chk = arr[0]
    del arr[0]
    n = 1
    
    while len(arr)!=0:
        if chk >= arr[0]:
            del arr[0]
            n += 1
        else:
            answer.append(n)
            chk = arr[0]
            del arr[0]
            n = 1
            
    answer.append(n) # 마지막 배포의 기능 개수 추가는 반복문 안에서 수행 X
        
    return answer

📝 코드 참고

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s): # 첫번째 기능 or 함께 배포 불가능한 경우
            Q.append([-((p-100)//s),1]) # [남은 작업일수, 기능 개수] 원소 추가
        else:
            Q[-1][1]+=1 # 함께 배포 가능한 경우, 기능 개수 1 추가
    return [q[1] for q in Q] # 각 배포별 기능 개수

✅ 주요 함수

  • append(x): 마지막 자리에 원소 x 추가
  • del list[x]: list에서 x 위치에 있는 원소 삭제
  • zip(): 각각의 원소를 순서대로 묶어 튜플 형태로 출력
    (만약 2개 이상의 인자를 입력받았을 때, 길이가 다를 경우에는 짧은 것이 기준)
profile
열정 가득한 공간

0개의 댓글