PS/Programmers
[프로그래머스] 기능개발
RUBY_루비
2020. 10. 15. 23:59
출처:: programmers.co.kr/learn/courses/30/lessons/42586
분류:: 스택
1. 문제 이해 및 해결과정
1. 스택
1. progresses의 길이 만큼 for문을 돈다 2. for문 돌면서 현재 인덱스의 소요일수를 저장한다 3. 만약 인덱스가 첫번째면 , 스택에 추가한다. 4. 인덱스가 첫번째가 아니면 , 스택의 첫번째 원소와 소요일수를 비교한다 4-1) stack[0]보다 현재 소요일수를 같거나 작다면, stack에 소요시간을 넣는다 4-2) stack[0]보다 현재 소요일수를 크다면, 1)res에 stack의 길이를 추가 2) 스택비운다 3) 현재 소요일 수 추가한다. |
2. 풀이방법
1. [ python ] 스택
import math
def solution(progresses, speeds):
stack=[] #배포가 가능한 기능
result=[]
for i in range(len(progresses)):
cur=math.ceil((100-progresses[i])/speeds[i])
if i==0: #첫번째 인덱스라면
stack.append(cur)
else: #첫번째 인덱스 아니라면
if stack[-1]>=cur: #stack의 첫번째원소 보다 현재 시간이 작다면
stack.append(cur)
else:
result.append(len(stack)) #결과에 stack의 길이 추가
stack.clear() #스택 비우기
stack.append(cur)
result.append(len(stack))
return result
2. [ python ] 큐
def solution(progresses, speeds):
result = []
while progresses:
cnt=0
progresses=[x+y for x,y in zip(progresses,speeds)] #93+1,30+30,55+5
while progresses and progresses[0]>=100: #현재 진행중인 기능이 100이 넘으면, 나머지 것들중 완성된 것도 같이 배포
progresses.pop(0) #배포한 기능제거
speeds.pop(0) #배포한 기능의 속도 제거
cnt+=1
if cnt!=0: #배포된 것이 1개이상이면
result.append(cnt)
return result
3. 오답원인
1. stack의 top과 cur을 비교한다고 생각했었는데, stack의 첫번째 들어온 원소보다 작은지 판단해야한다. 즉, stack[0]과 cur을 비교
4. 알게된 점
zip : 같은 개수로 이루어진 자료형을 묶어주는 역할을 하는 함수
list(zip([1,3,5],[2,4,6]))
#[(1,2),(3,4),(5,6)]
list(zip("xyz","pqr"))
#[('x','p'),('y','q'),('z','r')]
list(zip(progresses,speeds))
#[(93,1),(30,30),(55,5)]