곧죽어도 콛잉

[프로그래머스 / Python] 기능개발 본문

Coding Test/Python

[프로그래머스 / Python] 기능개발

코드진행형 2024. 2. 20. 18:48

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

 

프로그래머스

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

programmers.co.kr

 

이 문제가 queue라는 걸 알고 들어가면 쉽게 풀 수 있는 문제다.

 

pair로 (작업진도율, 작업속도)를 묶어서 해당값을 하나의 큐로 해주면 된다!

 

그리고 queue의 top이 작업진도율이 100이되면, 해당 top을 dequeue 해준다!

 

내가 너무 C스럽게 푼 것 같아서 pythonic한 코드를 찾아봤는데  가독성은 구리지만 정말 숏코딩이다....

 

빨리 파이썬 연습해서 단련해야겠다

 

from collections import deque

def solution(progresses, speeds):
    answer = []
    q = deque()
    for i in range(len(progresses)):
        q.append([progresses[i], speeds[i]])
    
    s = 0
    while s<len(progresses):
        a = 0
        for i in q:
            i[0] += i[1]
        
        while q:
            if q[0][0] >= 100 :
                a+=1
                s+=1
                q.popleft()
            else:
                break
        
        if a>0: 
            answer.append(a)
        
    return answer


# ================= 아래는 zip을 활용한 다른풀이 (숏코딩)

def solution2(progresses, speeds):
    q=[]
    for p, s in zip(progresses, speeds):
        if len(q)==0 or q[-1][0]<-((p-100)//s): # 작업일수 기준..!!
            q.append([-((p-100)//s),1])
        else:
            q[-1][1]+=1
    return [i[1] for i in q]

 

 

Comments