프로그래머스 level 2- 기능 개발
Computer Science/알고리즘(백준+프로그래머스)

프로그래머스 level 2- 기능 개발

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

 

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

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

programmers.co.kr

 

# Idea

: 기본적으로 Queue 를 이용한 문제이고, 아래의 지문을 읽어보면 앞의 기능이 모두 개발되지 않으면 뒤의 기능 또한 배포될 수 없다는 것에서 힌트를 얻을 수 있다.

-> 일단 기능들이 전부 queue에서 빠져나갈때까지 개발을 계속 진행하고, 매일 가장 앞의 기능이 100%이상 개발이 되었는지 확인하고, 뒤의 기능이 먼저 개발이 끝날 수도 있으니 진행이 100%이상 된 기능은 모두 pop해준다.

 

#나의 풀이

def solution(progresses, speeds):
    answer = []
    while len(progresses)!=0:
        for i in range(len(progresses)):
            progresses[i]+=speeds[i]
            
        deploy=0
        while(progresses[0]>=100):
            deploy+=1
            progresses.pop(0)
            speeds.pop(0)
            if len(progresses)==0:
                break
        
        if(deploy>0):
            answer.append(deploy)
        
    return answer

 

#실수한 부분

-> progresses를 pop해줄때 speed 또한 같이 pop해줘야 각 기능의 순서에 맞는 speed가 더해지는데 progresses만 pop해줘서 오류가 발생했다. 꼼꼼히 확인하자!

#다른 사람의 풀이

: 미리 각 작업의 소요 시간을 계산한 풀이이다.

import math

def solution(progresses,speeds):
    progresses=[math.ceil((100-a)/b) for a,b in zip(progresses,speeds)]
    answer =[]
    front= 0

    for idx in range(len(progresses)):
        if(progresses[idx]>progresses[front]):
            answer.append(idx)
            front=idx
    
    answer.append(len(progresses)-front)

    return answer

Testcase 1번을 예시로 들어보자.
- Progresses 세 개는 각각 7일, 3일, 9일 짜리 작업이다.
- 여기서 3일짜리 작업은 7일짜리 작업이 끝나지 않으면 출시될수 없다.
- 그렇지만 9일짜리 작업은 이미 7일,3일이 모두 한 번에 출시된 이후이므로 바로 출시가 가능하다.

: 여기서 얻을 수 있는 아이디어는 어떤 변수(front) 에 가장 오래 걸린 작업 시간(초기값: 맨 처음 기능의 작업 시간) 을 저장해두고, 그 작업 시간보다 오래 걸리는 작업이 발생하면 해당 변수를 업데이트 하는 것이다. 물론 그 업데이트 전까지의 작업들은 모두 출시가 한 번에 가능하다. ( 9일짜리 작업이 생기기 전까지 7일짜리, 3일짜리 작업은 모두 출시가 가능하다.)
: 그.. 하노이의 탑에서 본거같은 그런느낌

+) zip함수

numbers=[1,2,3] letters=['A','B','C']
#옷의 zipper처럼 두 그룹의 데이터를 엮어준다.
for a, b in zip(numbers,letters): 
	print(a,b)