RUBY

[프로그래머스] 기능개발 본문

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)]

 

Comments