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

파이썬을 사용하여 음식 패킷을 받는 사람의 수를 알아내는 프로그램

<시간/>

회의에 두 가지 유형의 사람들이 있다고 가정합니다. 첫 번째 유형의 사람들은 채식주의 점심을 선호하고 다른 유형은 비채식 점심을 선호합니다. 그러나 패킷 수에는 제한이 있으며 채식주의자가 비채식주의자 패킷을 받거나 그 반대의 경우도 마찬가지입니다. 그들은 그 패킷을 받지 않고 그들이 선호하는 것을 얻을 때까지 기다리지 않을 것입니다. 따라서 두 가지 다른 유형의 패킷과 사람은 채식주의자에 대해 0으로, 비채식주의자에 대해 1로 표시됩니다. 이제 우리는 두 개의 배열을 얻었습니다. 하나는 0과 1로 표시된 n개의 음식 패킷을 포함하고 다른 하나는 m명의 사람들의 대기열을 포함하며 선호도는 0과 1로 표시됩니다. 따라서 한 사람이 음식을 받지 못하면 선호하는 패킷, 그들은 마지막에 대기열에 다시 입력하고 선호하는 패킷을 기다립니다. 그래서 식량이 없는 사람들의 수를 알아내서 그들이 선호하는 봉지를 배열할 수 있어야 합니다.

따라서 입력이 people =[0,1,1,0], 패킷 =[0, 1, 0, 0]인 경우 출력은 1이 됩니다.

따라서 두 사람은 비채식 식품을 선호하고 있으며 비채식 패킷은 하나뿐입니다. non-veg를 선호하는 줄의 첫 번째 사람은 그 패킷을 받고 다른 non-veg 패킷이 없기 때문에 다른 사람은 계속 기다립니다. 따라서 출력은 1입니다.

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

  • temp_arr :=값 0과 0을 포함하는 새 목록

  • 사람의 각 사람에 대해 수행

    • temp_arr[사람] :=temp_arr[사람] + 1

  • k :=0

  • 동안 k <패킷 크기, 수행

    • temp_arr[packets[k]]>0이면

      • temp_arr[패킷[k]] :=temp_arr[패킷[k]] - 1

    • 그렇지 않으면

      • 루프에서 나오다

    • k :=k + 1

  • 패킷 크기 반환 - k

예시

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

def solve(people, packets):
   temp_arr = [0,0]
   for person in people:
      temp_arr[person] += 1
   k = 0
   while k < len(packets):
      if temp_arr[packets[k]]>0:
         temp_arr[packets[k]]-=1
      else:
         break
      k += 1
   return len(packets) - k

print(solve([0,1,1,0], [0, 1, 0, 0]))

입력

[0,1,1,0], [0, 1, 0, 0]

출력

1