본문 바로가기

코딩

프로그래머스 - 코딩테스트 고득점 Kit - 스택/큐 - 기능개발(python)

728x90

사담 없이 바로 문제 풀이하도록 하겠습니다!

 

일단 문제는 아래 링크 확인하시면 됩니다

https://school.programmers.co.kr/learn/courses/30/lessons/42586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해당 링크를 들어가서 문제를 이해했다는 전제 하에 코드 및 문제 풀이를 진행하도록 하겠습니다!

 

* 채점 결과는 아래와 같습니다

* 작성한 코드는 아래와 같습니다!

import math
def solution(progresses, speeds):
    answer = []
    day = []
    length=len(speeds)
    ###1
    for i in range(length):
        day.append(math.ceil((100 - progresses[i])/speeds[i]))
        #print(day)
    day.append(100)
    count=0
    M = day[0]
    ###2
    for i in range(length):
        count=count+1
        if M < day[i+1]:
            answer.append(count)
            M = day[i+1]
            count=0
            
    return answer

 

이제 코드를 왜 이렇게 짰는지 말씀드리자면

 

1) 각 작업에 대한 작업 시간(일 단위)를 확인하기

- 작업 시간= {100 - (작업 진도)}/(작업 속도) 이므로 이를 사용했습니다.

- 예를 들어 1.8일이 걸린다고 해도 결국 2일이 걸린 셈이므로, 올림을 해주는 Math.ceil()을 사용했습니다.

- 작업 시간을 저장하는 리스트인 day에다가 순서대로 넣어줍니다.

 

2) 각 배포마다 몇 개의 기능이 배포되는지 확인하기

- 만약 day[i]를 기준으로 해당 값과 day[i+1], day[i+2], .... , day[i+(n-i)]순으로 차례대로 비교해봤을 때, 비교값이 기준값보다 작은 경우, day[i]와 같은 날에 배포가 됩니다. (기준값보다 큰 값이 나오는 경우 day[i]에 대한 비교를 종료합니다.) 

- count 변수를 이용해서 이를 셉니다.