Algorithm/Python

[스택/큐] 기능개발

🥭맹2 2021. 5. 3. 23:19

1. 문제

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

 

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

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

programmers.co.kr

2. 접근 방법

스택을 이용하면 된다.

 

1. 기능 개발하는데 걸리는 시간 구해서 리스트에 담기

2-0. 기능 개발하는데 걸리는 시간 리스트 순회하며 현재 값이 전 값과 같거나 작다면 cnt += 1

2-1. 현재 값이 전 값보다 크다면 현재 cnt를 answer에 append하고 cnt 를 1로 초기화

 

이렇게 생각했다.

3. 코드

python

def solution(progresses, speeds):
    answer = []
    days = []
    for i in range(len(progresses)):
        progress = progresses[i]
        speed = speeds[i]
        day = (100-progress)//speed
        if (100-progress)%speed:
            day += 1
        days.append(day)
    cnt = 0
    max_val = days[0]
    while days:
        now = days.pop(0)
        if now <= max_val:
            cnt += 1
        else:
            answer.append(cnt)
            cnt = 1
            max_val = now
    answer.append(cnt)
    return answer

4. 마치며

프로그래머스는 풀고 난 뒤 다른 사람들의 코드를 보여주는데, 

zip을 사용한 풀이가 너무나 인상깊었다.

예전에 zip을 몇번 사용하고 그 이후로 사용을 안했는데, 

이 문제는 zip을 사용하는게 진짜 꿀 구현인거같다.

출처 : https://wikidocs.net/32#zip

주어진 인자가 progresses, speeds 라는 리스트들이기 때문에

zip으로 묶는게 편할거 같긴하다.

 

zip도 좋지만, 가장 문제를 정확히 구현한 코드는 이 코드인거 같아서 가져왔다.

def solution(progresses, speeds):
    print(progresses)
    print(speeds)
    answer = []
    time = 0
    count = 0
    while len(progresses)> 0:
        if (progresses[0] + time*speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer

time을 기준으로 구현한게 멋찌다 8ㅅ8

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

[백준 1593] 문자 해독  (0) 2021.05.05
[스택/큐] 프린터  (0) 2021.05.04
[백준 2309] 일곱 난쟁이  (0) 2021.05.03
[백준 6588] 골드바흐의 추측  (0) 2021.05.03
[백준 9613] GCD 합  (0) 2021.05.02