히비스서커스의 블로그

[Programmers] 기능개발 본문

Theory/Algorithm

[Programmers] 기능개발

HibisCircus 2021. 8. 21. 21:21
728x90

프로그래머스 코딩테스트 문제 중 스택/큐를 이용해야하는 문제 기능개발에 대해 파이썬으로 해결한 풀이와 해설입니다.

문제링크

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

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

 

solution

def solution(progresses, speeds):
    days = [0 for l in range(len(speeds))]
    cnt1 = 0
    while min(progresses) < 100:
        cnt1 += 1
        for i, (progress, speed) in enumerate(zip(progresses, speeds)):
                progresses[i] = progress + speed
                if (progresses[i] >= 100) and (days[i] == 0):
                    days[i] = cnt1   
    
    answer = []
    ans_num = days[0]
    cnt2 = 1
    for j in range(1, len(days)):
        if ans_num >= days[j]:
            cnt2 += 1
        else:
            answer.append(cnt2)
            ans_num = days[j]
            cnt2 = 1
    answer.append(cnt2)
    
    return answer

 

해설

저는 크게 2 파트로 나누어 해결하였습니다. 2 파트는 각 작업의 개발하는데 걸린 일수가 담긴 리스트를 만드는 과정과 그 일수가 담긴 리스트에서 배포일이 담긴 리스트를 만다는 과정입니다.

 

각 작업의 개발하는데 걸린 일수가 담긴 리스트를 만드는 과정

 

1. speeds의 길이와 동일하며 0이 담긴 days 리스트를 만듭니다.

2. 카운트변수 cnt1을 0으로 설정한 후 progresses 리스트의 최소값이 100보다 작을 동안 while문을 돌게 합니다.

3. 한 번 돌 때마다 cnt1을 1씩 증가시키고 for구문을 돌리면서 progresses와 speed의 원소들을 하나씩 빼낸 후 둘을 더한 것으로 progresses의 원소를 최신화합니다.

4. if 문을 통해 progresses의 원소의 값이 100을 넘고 동시에 days의 값이 0이 아니라면 days의 원소의 값을 cnt1으로 대체해줍니다. (days의 값이 0이 아닌 조건을 넣어준 이유는 처음 100을 넘는 순간만 넣기 위함입니다.)

 

일수가 담긴 리스트에서 배포일이 담긴 리스트를 만다는 과정

 

메인 아이디어days 리스트 안에서 앞의 원소들보다 큰 원소가 나올 경우 앞의 원소들의 합을 구하여 answer 리스트에 넣는 것입니다.

 

1. answer 리스트를 생성해주고 days의 첫번째 원소의 값을 ans_num이라는 변수에 넣습니다.

2. for문을 돌면서 days에 있는 원소들을 두번째 원소부터 뽑으며 ans_num보다 큰 경우에는 cnt2변수를 1증가시켜주고 그렇지 않은 경우에는 answer 리스트에 넣어주고 ans_num을 최신화시켜주고 cnt2를 다시 1로 바꿔줍니다.

3. for 문이 끝났을 경우 마지막 cnt2의 값이 answer에 넣어주지 않은 상태이므로 넣어주고 그 값을 return합니다.

 

 

 

-히비스서커스-

728x90

'Theory > Algorithm' 카테고리의 다른 글

[Programmers] 베스트앨범  (0) 2021.09.03
[Programmers] 위장  (0) 2021.09.02
[Algorithm] 해시법  (0) 2021.08.26
[Programmers] 더 맵게  (2) 2021.08.20
[Algorithm] 선형검색 이진검색  (0) 2021.02.04