프로그래머스 코딩테스트 고득점 Kit_스택/큐_기능개발

Minhee kang·2021년 7월 23일
0

문제 보러 가기 👈 클릭!

💡 풀이

✔ 풀이 방법

progress_q = 완성되지 않은 기능(큐 자료구조)
speed_q = 완성되지 않은 기능의 속도(큐 자료구조)

기능이 모두 완성 될때까지 day를 1씩 늘려가며 맨 앞에 있는 기능이 완성됬는지 아닌지 확인한다.

기능이 완성됬을경우, 해당 기능과 속도를 큐에서 제거하고 개수를 count한다. 단 해당 경우에는 day를 1 증가시키지 않는다.

기능이 완성되지않은경우,이때까지 count한 개수가 0 이상이면 answer에 추가하고 0으로 다시 초기화 시킨다. count 개수와 상관없이 항상 day를 1 증가시킨다.

구현 코드👇

from collections import deque
def solution(progresses, speeds):
    answer = []
    day, cnt = 1, 0
    progress_q, speed_q = deque(progresses), deque(speeds)
    while progress_q:
        if progress_q[0] + speed_q[0] * day >= 100:
            progress_q.popleft()
            speed_q.popleft()
            cnt += 1
        else:
            if cnt: 
                answer.append(cnt)
                cnt = 0
            day += 1
    answer.append(cnt)
            
    return answer

✔ 다른 풀이 방법

Q = [[기능을 완성하는데 걸리는 일 수, 해당 일수에 완성하는 기능의 개수], ....] 로 정의한다.

zip함수를 사용하여 기능과 기능의 속도를 함께 차례대로 꺼낸다.
꺼낸 기능과 속도를 사용하여 해당 기능을 완성하는데까지 걸리는 일 수를 구한다.

해당 일 수가 앞의 기능을 완성하는데까지 걸리는 일 수 보다 클 경우, Q에 [걸리는 일 수, 1]을 추가한다.

작을 경우, 앞의 기능을 완성하는데까지 걸리는 일 수에 완성하는 기능의 개수를 1 증가 시킨다.

해당 일수에 완성하는 기능의 개수 부분만 return 한다.

구현 코드👇

def solution(progresses, speeds):
    
    Q = []
    for progress, speed in zip(progresses, speeds):
        if not Q or Q[-1][0] < -((progress - 100) // speed):
            Q.append([-((progress - 100) // speed), 1])
        else:
            Q[-1][1] += 1
            
    return [q[1] for q in Q]

0개의 댓글

관련 채용 정보