728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3
최종 코드
def solution(progresses, speeds):
answer = []
last = 100-progresses[0]
front = 0
if last%speeds[0] == 0:
front = last//speeds[0]
else: front = last//speeds[0]+1
cnt = 1
for i in range(1, len(progresses)):
last = 100 - progresses[i]
day = 0
if last%speeds[i]==0:
day = last//speeds[i]
else:
day = last//speeds[i]+1
if day <= front:
cnt += 1
else:
answer.append(cnt)
cnt = 1
front = day
answer.append(cnt)
return answer
풀이 과정
풀이 시간 13분
먼저 배포되어야 하는 순서대로 progresses에 작업의 진도가 적혀있기 때문에, 첫 번째 기능의 배포일을 기준으로 다음 기능의 배포일이 작거나 같은 경우 카운팅을 하여 answer에 append해주는 방식으로 문제를 풀었다.
1. 초기 단계 설정
- 첫 번째 기능의 배포일을 front로 설정한다. 100-progresses[0]을 한 값이 나머지 작업량이고 이를 speeds[0]으로 나누었을 때 나누어 떨어지면, 몫이 첫 번째 기능의 배포일이다. 나누어 떨어지지 않으면 하루가 더 필요하므로 몫+1을 한 값이 배포일이 된다. 첫 번째 기능이 개발되었으므로 cnt를 1로 초기화한다.
2. 두 번째 기능부터 마지막 기능까지 순서대로 탐색하며 아래 과정을 반복한다.
- 현재 기능의 배포일을 계산하여 day를 구한다,
- 현재 기능의 배포일이 front보다 작거나 같은 경우, 함께 배포되므로 cnt += 1을 해준다.
- 현재 기능의 배포일이 front보다 큰 경우, 이전 기능들만 배포되므로 answer.append(cnt)를 해준다. 이때, 현재 기능의 배포일이 다시 기준이 되기 때문에 front로 설정하고, cnt = 1로 다시 초기화 해준다.
3. 마지막 배포일에 추가되는 기능 수를 answer에 담아주고 answer을 return한다.
progresses에 담긴 순서대로 한 번씩 탐색하므로 시간복잡도는 O(n)이고, 공간복잡도도 역시 O(n)이다.
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 다리를 지나는 트럭 Python3 (0) | 2021.07.05 |
---|---|
Level 2 프린터 Python3 (0) | 2021.07.04 |
Level 3 단어 변환 Python3 (0) | 2021.07.01 |
Level 3 네트워크 Python3 (0) | 2021.07.01 |
Level 2 타겟 넘버 Python 3 (0) | 2021.06.30 |