https://programmers.co.kr/learn/courses/30/lessons/42586
# 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)
'Computer Science > 알고리즘(백준+프로그래머스)' 카테고리의 다른 글
프로그래머스 level 3- 가장 먼 노드 (0) | 2022.01.10 |
---|---|
프로그래머스 level 2- 타겟 넘버 (0) | 2022.01.09 |
P-NP Problems (0) | 2021.12.03 |
String Algorithm(KMP,Boyer-Moore) (0) | 2021.11.30 |
Dynamic Programming (0) | 2021.11.30 |