https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3
코딩테스트 연습 - 기능개발
프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는
programmers.co.kr
최종 코드
hwayeon351/Programmers-Algorithms
프로그래머스 알고리즘 소스 코드 모음. Contribute to hwayeon351/Programmers-Algorithms development by creating an account on GitHub.
github.com
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)이다.
'코테 노트 > 프로그래머스' 카테고리의 다른 글
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 |