데이터 엔지니어
프로그래머스 - [LEVEL 2] 기능개발 본문
문제링크: programmers.co.kr/learn/courses/30/lessons/42586?language=python3
문제 설명
- progresses: 작업의 진도 (100% 기준)
- speeds: 작업의 속도
progress가 100이 되면 배포를 진행하는데 배포는 앞에 작업이 먼저끝나야 진행할 수 있다.
개발은 순서와 상관없이 진행되고 배포될 때 한번에 배포되는 개수를 list로 담아 리턴하는 문제입니다.
- 예시
progresses: [93, 30, 55] | speeds: [1, 30, 5] |
1번 작업이 93 -> 100 까지에 7일이 걸립니다.
2번 작업은 개발은 3일만에 끝나는데 1번 작업 배포가 완료되지 않아 대기했다가 7일차에 같이 배포됩니다.
3번은 개발은 9일 걸리고 1, 2번이 배포되고나서 3번만 따로 배포됩니다.
그래서 2번 1번으로 [2, 1]을 리턴해주면 정답입니다.
풀이
매 시간이 지날때 마다 progresses의 첫번째 값이 100이 넘었는지 확인해주며 progresses, speeds를 둘 다 pop해주면 되는 문제입니다.
progresses와 speeds를 큐라 생각하고 조건을 잘 확인해주면 되는 문제입니다.
주의할 점
- count를 정답에 추가할 때 초기화해야 함
- pop할 때는 시간을 추가하지 않음
코드
def solution(progresses, speeds):
answer = []
count = 0
time = 0
while progresses:
# print(progresses, speeds, answer)
# 맨 앞에 값이 100보다 커지면
if (progresses[0] + time*speeds[0]) >= 100:
count += 1
progresses.pop(0)
speeds.pop(0)
else:
if count > 0:
answer.append(count)
count = 0
time += 1
answer.append(count)
return answer
'프로그래밍(Programming) > 알고리즘(Algorithm)' 카테고리의 다른 글
프로그래머스 - [LEVEL 2] 더 맵게 (0) | 2020.10.04 |
---|---|
프로그래머스 - [LEVEL 2] 큰 수 만들기 (0) | 2020.09.26 |
백준 - [Platinum 3] 5446번 용량 부족 (0) | 2020.09.24 |
백준 - [Silver 3] 2579번 계단 오르기 (0) | 2020.09.22 |
백준 - [Gold 4] 전화번호 목록 (0) | 2020.09.21 |
Comments