[프로그래머스_스택/큐_Lv2] 기능 개발

Lee, Chankyu·2022년 1월 8일
0
post-thumbnail

기능 개발

문제 링크

나의 풀이

def solution(progresses, speeds):
    answer = []
    count  = 0
    day    = 0
    
    while len(progresses) > 0:
        day+=1
        if 100-(progresses[0] + day*speeds[0]) <= 0:
            progresses.pop(0)
            speeds.pop(0)
            count+=1
            day-=1
        else:
            if count > 0:
                answer.append(count)
                count = 0
        
    answer.append(count)
    return answer
  • 이 문제는 무조건 선입선출(FIFO)이 되어야하기 때문에 queue 자료구조를 염두하고 풀이하였다. queue의 경우 pop(0) 을 적재적소에 잘 사용해야 한다. 앞으로도 잘 기억해두자!

  • count, day 변수를 미리 설정해두었다. 문제를 읽으면 어떤 변수가 새로 필요할지 잘 생각해야한다. 나는 아직 이것이 조금 서툰 것 같다. 연습!!

  • if문안에 day-=1을 한 이유는, count가 1이 올라가고 progresses에서 다음 인덱스의 요소도 같은 날에 기능 개산 작업이 끝났는지 확인해야 하는데 1을 안빼주면 다음 날짜에 확인한 것과 다름이 없어진다.


colletions모듈의 deque을 사용한 코드

from collections import deque


def solution(progresses, speeds):
    answer = []
    count  = 0
    day    = 0
    
    progresses = deque(progresses)
    speeds     = deque(speeds)
    
    while progresses:
        day+=1
        if (progresses[0] + speeds[0]*day) >= 100:
            count+=1
            progresses.popleft()
            speeds.popleft()
            day-=1
        else:
            if count > 0:
                answer.append(count)
                count = 0
    
    answer.append(count)        
    return answer
  • 지난번 덱(deque)을 공부할때 알게되었던 collections 모듈을 사용해보았다. 첫 번째 작성한 코드와 똑같은 로직으로 작성하였지만 복습 차원에서 사용해 보았다.
profile
Backend Developer - "Growth itself contains the germ of happiness"

0개의 댓글