프로그래밍 공부방

[프로그래머스] 스택/큐_기능개발 본문

프로그래밍/프로그래머스

[프로그래머스] 스택/큐_기능개발

김갱갱 2022. 1. 13. 00:05

프로그래머스 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


 

def solution(progresses, speeds):
    answer = []   
    
    while progresses[0] < 100:
        result = 0
        
        if progresses[0] == 0:
            break
            
        for i in range(len(progresses)):
            if progresses[i] != 0:
                progresses[i]+= speeds[i]   
            else:
                break

        while progresses[0] >= 100:       
            progresses.pop(0)
            speeds.pop(0)
            progresses.append(0)
            speeds.append(0)
            result += 1
        
        if result>0:
            answer.append(result)        
                        
    return answer

우선 기능의 진도가 100%가 되어야 서비스에 반영할 수 있기 때문에 진도가 100미만일 때 반복하게 했다.

for문쪽에서는 기능별로 각각의 진행속도를 더해주는 작업을 했다.

 

현재 작업 진도 리스트에서 첫 번째 값을 보았을 때 이것이 100 이상이면 작업진도 리스트와 작업 속도 리스트에서 맨 처음 값을 pop해주었다. 하나의 값을 pop한 후에는 append를 이용해서 맨 뒤에 0 값을 넣어주었다. 

이렇게 한 이유는 pop만 해주면 리스트의 길이가 달라지기 때문에 index 에러가 나는 것을 없애주기 위해서이다.

위 작업에서 진도가 100이상일 때 배포가 되게 했기 때문에 result값을 1씩 올려주어서 배포된 수를 세었다.

 

이제 첫 번째 if문으로 돌아가보면 progresses[0] == 0이면 break하게 했다.

왜냐하면 위에서 append를 이용해서 0값을 리스트 안에 넣어주었기 때문이다.

⁂ progresses[0]가 0이라는 것은 배포가 다 완료되어서 모든 값이 0이 되었다는 뜻이다.

 

마지막 if문에서는 각 배포마다 몇 개의 기능이 배포되는지를 return해주기 위해 result값이 0이상이면 값을 추가했다.

 

 

😤 이 문제를 풀면서 좀 더 공부해야겠다고 생각된 부분 😤

1. 리스트에서 pop을 했을 때 해당 값이 사라지게 된다. 이 때 리스트의 길이가 달라지기 때문에 인덱스 오류가 생기게 되는데 이것을 해결하려면 어떤 식으로 해야하는지 공부해야할 것 같다.... 어떻게 하는 게 좋을까...

2. 이보다 더 쉽게 구현하기 위해서 파이썬에 있는 스택/큐와 관련된 모듈에 대해서 더 알아보아야겠다.