프로그래머스 스택/큐 3.기능개발 파이썬

Jamwon·2021년 4월 28일
0

알고리즘

목록 보기
5/18
post-thumbnail

문제링크


위와 같이 배열로 progresses가 100이넘으면 배포가 되는건데 제일 앞에있는 기능이 완성이되야 배포가 되는 그런 문제이다.

내가푼 코드

def solution(progresses, speeds):
    answer =[]    
       
    index =0
    length = 0

    while progresses:
        
        # print(progresses)
        for i in range(len(progresses)):
            progresses[i]+=speeds[i]
        
        if len(progresses)==1:
            progresses.pop()
            answer.append(1)
            break
        while progresses[0]>=100:
            
            if len(progresses)==1:
                length+=1
                progresses.pop(0)
                answer.append(length)
                length=0
                break
            
            progresses.pop(0)
            speeds.pop(0)
            length +=1
            index +=1
            
        if (length > 0):
            answer.append(length)
            length =0
            index =0
        print(answer)
            
            
    print(answer)
    return answer


solution([95, 90, 99, 99, 80, 99],[1, 1, 1, 1, 1, 1])

코드가 굉장히 길고... 더럽다!!!
풀은 방식은 progresses 배열이 존재할때 까지 while문을 돌리면서 pogresses 배열의 길이만큼 speeds를 더해줘서 시간이 지나면서 progress가 증가하는 것을 표현했다.

방법은 progresses의 첫번째 원소가 100이상이면 그 원소를 pop 해주고 length 변수(몇개의 progress를 배포할지를 알려주는 변수)와 index를 1씩 늘려주는 것을 반복해고 100이 넘지 않는 progress를 만나면 그때의 length를 answer list에 추가해주었다.

생각 보다 중간 중간에 원소가 1개일때 오류가 많이나서 코드도 지저분해고 길게 되었는데 간단한 문제인데 오래걸려서...짜증이 많이났다 이럴때일 수록 마음을 가다음고 효율적인 방법을 찾도록 노력해보자...

찾아본 모범 답안

def solution(progresses, speeds):
    Q=[]
    for p, s in zip(progresses, speeds):
        if len(Q)==0 or Q[-1][0]<-((p-100)//s):
            Q.append([-((p-100)//s),1])
        else:
            Q[-1][1]+=1
    return [q[1] for q in Q]

zip 함수를 이용했다! 아 ! 문제를 풀때 zip함수를 쓸 생각이 안났다. zip 함수를 제외하더라도 밑의 수식은...너무나 간단하게 잘푼거같다. 다시 풀라해도 저렇게는 못풀었을듯 그래도 더 간단하게 풀려고 노력하자!

profile
한걸음씩 위로 자유롭게

0개의 댓글