Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

좋아하는 날 좋아하는 캔디를 먹을 수 있는지 파이썬으로 확인하는 프로그램

<시간/>

candiesCount[i]가 i번째 유형의 사탕 수를 나타내는 양수 값 candiesCount의 배열이 있다고 가정합니다. 또한 query[i]에 세 개의 매개변수[favoriteType_i, FavoriteDay_i, dailyCap_i]가 있는 쿼리라는 또 다른 배열이 있습니다. 몇 가지 규칙이 있습니다:

  • 0일차부터 사탕 먹기 시작합니다.

  • 우리는 이전의 i-1 유형의 사탕을 모두 먹지 않는 한 유형 i의 사탕을 먹을 수 없습니다.

  • 우리는 그것을 모두 먹을 때까지 하루에 적어도 하나의 사탕을 먹어야 합니다.

이러한 규칙을 유지하려면 각 쿼리 결과에 대해 부울 값의 배열을 만들어야 하며 어떤 날에도 dailyCap_i 캔디 이상을 먹지 않고 favoriteDay_i 형식의 캔디를 먹을 수 있으면 i 번째 항목이 참입니다. 규칙 2를 따르면 같은 날 다양한 종류의 사탕을 먹을 수 있습니다.

따라서 입력이 candiesCount =[7,4,5,3,8], 쿼리 =[[0,2,2],[4,2,4],[2,13,100]]인 경우 출력은

때문에 [true,false,true]가 됩니다.
  • 0일차와 1일차에 0형 사탕을 2개 먹으면, 0일차에 0형 사탕을 먹습니다.

  • 우리는 매일 최대 4개의 사탕을 먹을 수 있습니다. 우리가 매일 4개의 사탕을 먹으면 0일에는 0종 사탕을 4개, 1일에는 0종 4개, 1종 사탕을 먹게 됩니다. 그러면 2일에는 1종, 2종 4개만 먹을 수 있습니다. 사탕이므로 2일차에는 유형 4의 사탕을 먹을 수 없습니다.

  • 우리는 매일 1개의 사탕을 먹을 수 있으며, 13일차에 유형 2의 사탕을 먹을 것입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • sumcandy :=단일 요소가 있는 목록 candiesCount[0]

  • 인덱스:=1

  • 동안 인덱스

    • sumcandy의 끝에 (sumcandy[index-1] + candiesCount[index]) 삽입

    • 인덱스 :=인덱스 + 1

  • sumcandy 끝에 0 삽입

  • res:=새 목록

  • 쿼리에서 각각에 대해 수행

    • 유형:=각[0]

    • 일:=각[1]

    • cap:=각[2]

    • day+1> sumcandy[typ] 또는 (day+1)*cap <=sumcandy[typ-1]이면

      • res의 끝에 False 삽입

    • 그렇지 않으면

      • res의 끝에 True 삽입

  • 반환 해상도

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

def solve(candiesCount, queries):
   sumcandy = [candiesCount[0]]
   index=1
   while index < len(candiesCount):
      sumcandy.append(sumcandy[index-1] + candiesCount[index])
      index+=1
   sumcandy.append(0)
   res=[]
   for each in queries:
      typ=each[0]
      day=each[1]
      cap=each[2]
      if day+1 > sumcandy[typ] or (day+1)*cap <= sumcandy[typ-1]:
         res.append(False)
      else:
         res.append(True)
   return res

candiesCount = [7,4,5,3,8]
queries = [[0,2,2],[4,2,4],[2,13,100]]
print(solve(candiesCount, queries))

입력

[7,4,5,3,8], [[0,2,2],[4,2,4],[2,13,100]]

출력

[True, False, True]