일할 수 있는 최대 주 수

1841 단어 theabbieleetcodedsa
n에서 0까지 번호가 매겨진 n - 1개의 프로젝트가 있습니다. 정수 배열milestones이 제공되며 각 배열milestones[i]은 프로젝트ith의 마일스톤 수를 나타냅니다.

다음 두 가지 규칙에 따라 프로젝트에서 작업할 수 있습니다.
  • 매주 하나의 프로젝트에서 정확히 하나의 이정표를 완료하게 됩니다. 매주 일해야 합니다.
  • 연속 2주 동안 동일한 프로젝트의 두 마일스톤에서 작업할 수 없습니다.

  • 모든 프로젝트의 모든 이정표가 완료되거나 작업할 수 있는 유일한 이정표로 인해 위의 규칙을 위반하는 경우 작업을 중지합니다. 이러한 제약으로 인해 모든 프로젝트의 이정표를 완료하지 못할 수도 있습니다.

    위에서 언급한 규칙을 위반하지 않고 프로젝트에서 작업할 수 있는 최대 주 수를 반환합니다.

    예 1:

    입력: 이정표 = [1,2,3]
    출력: 6
    설명: 한 가지 가능한 시나리오는 다음과 같습니다.
    - 1주차에는 프로젝트 0의 마일스톤을 작업하게 됩니다.
  • 두 번째 주에는 프로젝트 2의 마일스톤 작업을 하게 됩니다.
  • 3주차에는 프로젝트 1의 마일스톤 작업을 하게 됩니다.
  • 4주차에는 프로젝트 2의 마일스톤 작업을 하게 됩니다.
  • 5주차에는 프로젝트 1의 마일스톤 작업을 하게 됩니다.
  • 6주차에는 프로젝트 2의 마일스톤 작업을 하게 됩니다.
    총 주는 6주입니다.

  • 예 2:

    입력: 이정표 = [5,2,1]
    출력: 7
    설명: 한 가지 가능한 시나리오는 다음과 같습니다.
  • 첫 번째 주에는 프로젝트 0의 마일스톤 작업을 하게 됩니다.
  • 2주차에는 프로젝트 1의 마일스톤 작업을 하게 됩니다.
  • 3주차에는 프로젝트 0의 마일스톤 작업을 하게 됩니다.
  • 4주차에는 프로젝트 1의 마일스톤 작업을 하게 됩니다.
  • 5주차에는 프로젝트 0의 마일스톤 작업을 하게 됩니다.
  • 6주차에는 프로젝트 2의 마일스톤 작업을 하게 됩니다.
  • 7주차에는 프로젝트 0의 마일스톤 작업을 하게 됩니다.
    총 주는 7주입니다.
    규칙을 위반하기 때문에 8번째 주에 프로젝트 0의 마지막 이정표에서 작업할 수 없습니다.
    따라서 프로젝트 0의 한 이정표는 미완성 상태로 남게 됩니다.

  • 제약:
  • n == milestones.length
  • 1 <= n <= 105
  • 1 <= milestones[i] <= 109

  • 해결책:

    class Solution:
        def numberOfWeeks(self, milestones: List[int]) -> int:
            total = 0
            maxval = float('-inf')
            for m in milestones:
                total += m
                maxval = max(maxval, m)
            total -= maxval
            return min(2 * total + 1, total + maxval)
    

    좋은 웹페이지 즐겨찾기