관리 메뉴

JIE0025

[프로그래머스] 스택/큐 _ 기능개발 (파이썬 level2) 본문

알고리즘/프로그래머스

[프로그래머스] 스택/큐 _ 기능개발 (파이썬 level2)

Kangjieun11 2022. 5. 26. 19:27
728x90

 

프로그래머스 스택 큐를 이용한 기능개발이라는 문제다.

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

 

테스트케이스 그림으로 확인                                      슈도코딩

1) 작업이 마감되기까지 몇일이 걸리나 계산 후 리스트에 할당

 

(어떤일의 남은 작업퍼센트)를 (하루에 개발가능한 퍼센트)로 나누었을때 나머지가 0이 아니면 하루를 더 추가하면 된다.

    n = len(progresses)
    
    #1_ 작업이 마감되기까지 몇일이 걸리나 계산.
    finish_days = []
    for i in range(n):
        remain = 100 - progresses[i]
        
        day = remain // speeds[i]
        if remain % speeds[i] != 0:
            day +=1

        finish_days.append(day)

 

이과정을 끝내면 finish_days 라는 리스트는 [7,3,9] 가 된다.

 

 

 

2) now라는 변수에 첫번째 인덱스를 일단 저장 == 0 

1부터 n까지 for문을 만든다.

 

>> finish_days[now] 가 7인데 이후에 이값보다 큰 값을 만나게 되면 그전까지의 것이 한꺼번에 배포가 된다는 뜻이다.

 

9를 만나면 i는 2일테고, now는 0인 상태이므로

i - now는 한번에 배포가 되는 수가 된다. 

 

answer에 append해주고,

now = i 를 통해 다시 체크할 수 있도록 한다. 

 

마지막 배포의 경우 더 큰값을 만날 수 없으므로

for문을 탈출한 이후에   

전체 기능의 개수 n - now를 해서 마지막에 append해준다. 

 

 

    #2_ 인덱스로 접근
    now = 0
    answer = []
    for i in range(1,n):
        if finish_days[i] > finish_days[now]:
            answer.append(i - now)
            now = i
    answer.append(n-now)
    
    return answer

 

 

 

전체 코드

def solution(progresses, speeds):
    
    n = len(progresses)
    
    #1_ 작업이 마감되기까지 몇일이 걸리나 계산.
    finish_days = []
    for i in range(n):
        remain = 100 - progresses[i]
        
        day = remain // speeds[i]
        if remain % speeds[i] != 0:
            day +=1

        finish_days.append(day)
    
    #2_ 인덱스로 접근
    now = 0
    answer = []
    for i in range(1,n):
        if finish_days[i] > finish_days[now]:
            answer.append(i - now)
            now = i
    answer.append(n-now)
    
    return answer