[Python] 프로그래머스 / 스택/큐 / 기능개발 / 리스트 순서대로 비교

2024. 3. 5. 12:46Coding Test/Python

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

 

프로그래머스

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

programmers.co.kr

 

 

def solution(progresses, speeds):
    answer = []
    num = []
    
    # 작업 시간
    for i in range(len(progresses)):
        work = 100 - progresses[i]
        if 0<work%speeds[i]<speeds[i]:
            reminder = work//speeds[i]+1
            answer.append(reminder)
        else:
            reminder = work//speeds[i]
            answer.append(reminder)
    # 배포 개수
    output = 1  # 초기 배포되는 기능의 개수는 1개로 시작
    for j in range(0, len(answer)-1):
        if answer[j] >= answer[j+1]:
            output += 1  # 배포되는 기능의 개수를 증가시킴
        else:
            num.append(output)
            output = 1  # 새로운 배포일이 시작되면 기능 개수를 다시 1개로 초기화
    num.append(output)  # 마지막 배포일의 기능 개수 추가
    return num

 

배포의 경우 chatgpt에게 물어서 겨우 풀었지만 테스트1, 2만 맞추고 나머지 다 오답.

 

def solution(progresses, speeds):
    result = 1
    answer = []
    num = []
    for i, j in zip(progresses, speeds):
        if (100-i)%j==0:
            mod = (100-i)//j
            answer.append(mod)
        else:
            mod = (100-i)//j+1
            answer.append(mod)
    
    while len(answer)>=2:
        if answer[0]>=answer[1]:
            result += 1
            answer.pop(0)
        else:
            num.append(result) # num에 추가하고
            result = 1 # result 값 초기화
            answer.pop(0)
    num.append(result) # 마지막 결과 추가
    return num

 

while 문을 써서 다시 푼 결과

 

정확성: 27.3
합계: 27.3 / 100.0
 
def solution(progresses, speeds):
    answer = []
    
    while progresses: # 리스트가 비어있지 않을 때까지 반복
        cnt = 0 # 배포 수
        
        while progresses and progresses[0]>=100: 
            # 리스트가 비어있지 않고 맨 앞에 작업진도가 100이 된다면
            cnt += 1
            progresses.pop(0)
            speeds.pop(0)
        
        progresses = [progresses[i] + speeds[i] for i in range(len(progresses))]
        # progresses update.
        
        if cnt: # cnt가 0이 아니라면 결과 리스트에 추가.
            answer.append(cnt)
    return answer
 

입출력 순서에 대한 언급이 있다면, stack , queue 이라 간파하고 pop 으로 풀려고 해보기 

 

ref :


https://happy-obok.tistory.com/38

 

[프로그래머스] 기능 개발 문제 풀이 (파이썬/ 큐)

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

happy-obok.tistory.com