프로그래머스

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

programmers.co.kr


나의 풀이

  • 배포 완료된 경우, pop(0)를 실행해야 하기 때문에 stack 대신 queue를 활용했다.
  • 돌아보면 배포 가능한 프로그램을 굳이 담아둘 필요가 없었다.
from collections import deque

def solution(progresses, speeds):
    # 배포 / 개발 속도
    progresses = deque(progresses)
    speeds = deque(speeds)
    
    answer = []
    deploy_list = []
    
    while progresses:
        # 하루 작업 진행
        for i in range(len(progresses)):
            progresses[i] += speeds[i]
            # 배포 가능
            if progresses[0] >= 100 and progresses[i] >= 100:
                deploy_list.append(i)
        # 배포 프로그램 선정
        if deploy_list:
            now = 0
            cnt = 1
            # 차례대로 배포 : 이전 idx와 1 차이
            for j in deploy_list[1:]:
                if j - now == 1:
                    now = j
                    cnt += 1
                    continue
                else:
                    break
            # 배포 가능 개수
            answer.append(cnt)
            # 배포 후 제거
            for _ in range(cnt):
                progresses.popleft()
                speeds.popleft()  
        # 초기화
        deploy_list = []
        
    return answer

다른 사람 풀이

  • 배포 가능조건이 만족되면 바로 제거하는 방식으로 해결했다.
#deque을 사용한 버전입니다.
def solution(progresses, speeds):
    ProgressesQue = deque(progresses)
    SpeedsQue = deque(speeds)
    count = 0
    answer = []
    while ProgressesQue:
        if ProgressesQue[0] + SpeedsQue[0] >= 100:
            ProgressesQue.popleft()
            SpeedsQue.popleft()
            count += 1
        else:
            if count:
                answer.append(count)
                count = 0
            for i in range(len(ProgressesQue)):
                ProgressesQue[i] += SpeedsQue[i]
    answer.append(count)
    return answer
 

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

프로그래머스 스택/큐 첫 번째 문제를 파이썬으로 풀어보았습니다.

velog.io