[프로그래머스 42586 파이썬] 기능개발 (level 2, 스택/큐)

배코딩·2022년 2월 14일
0

PS(프로그래머스)

목록 보기
5/36

알고리즘 유형 : 스택/큐
풀이 참고 없이 스스로 풀었나요? : O

https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3




소스 코드(파이썬)

def solution(progresses, speeds):
    answer = []
    dates = []
    count = 0
    
    for p, s in zip(progresses, speeds):
        date = -((p-100) // s)
        dates.append(date)
    
    dates.append(float("inf"))
    cnt_date = dates[0]
    for date in dates:
        if date <= cnt_date:
            count += 1
        else:
            answer.append(count)
            cnt_date = date
            count = 1
    
    return answer



풀이 요약

  1. 먼저 각 작업별 소요일수를 리스트로 구해놓는다. zip을 이용하여, 작업과 속도를 가지고 소요일수를 계산한다.

    이 때, 100-p가 아닌, p-100을 하여 음수로 만들어주고, 이를 s로 몫을 취한 뒤 다시 마이너스를 곱해주면, math.ceil을 쓰지않고도 올림을 수행할 수 있다.


  1. 이 후, 구해놓은 리스트 dates를 돌면서, cnt_date에 저장된 현재 경과일 수를 date와 비교하며, cnt_date 이하이면 count를 증가시키고, 적으면 이전까지의 count를 정답 리스트에 넣은 뒤, cnt_date를 현재 작업의 경과일 수로 맞추고 count = 1로 둠으로써 현재 작업을 마친 상태를 만든 뒤 다음 작업으로 넘어가준다.

  1. 이 때, 만약 제일 마지막 작업의 경과일 수가 cnt_date보다 작아서 count를 1 증가시키고 for문이 끝나버리면 남은 count를 answer에 추가할 수 없으므로, dates의 마지막에 가장 큰 수 float("inf")를 넣어준다.


배운 점, 어려웠던 점

  • math.ceil 말고도 올림을 구현하는 방법을 하나 새로 알게 되었다.

  • 풀긴 풀었다만, 이게 왜 스택/큐 문제로 분류되어 있는지는 잘 모르겠다... 스택/큐로 푸는 방법도 잘 모르겠고 굳이 효율적이고 직관적인 풀이를 두고 스택/큐로 풀어야하는 이유도 모르겠다...
profile
PS, 풀스택, 앱 개발, 각종 프로젝트 내용 정리 (https://github.com/minsu-cnu)

0개의 댓글