코테 노트/프로그래머스

Level 2 기능 개발 Python3

화요밍 2021. 7. 4. 16:52
728x90
반응형

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. 두 번째 기능부터 마지막 기능까지 순서대로 탐색하며 아래 과정을 반복한다.

  1. 현재 기능의 배포일을 계산하여 day를 구한다,
  2. 현재 기능의 배포일이 front보다 작거나 같은 경우, 함께 배포되므로 cnt += 1을 해준다.
  3. 현재 기능의 배포일이 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