회의에 두 가지 유형의 사람들이 있다고 가정합니다. 첫 번째 유형의 사람들은 채식주의 점심을 선호하고 다른 유형은 비채식 점심을 선호합니다. 그러나 패킷 수에는 제한이 있으며 채식주의자가 비채식주의자 패킷을 받거나 그 반대의 경우도 마찬가지입니다. 그들은 그 패킷을 받지 않고 그들이 선호하는 것을 얻을 때까지 기다리지 않을 것입니다. 따라서 두 가지 다른 유형의 패킷과 사람은 채식주의자에 대해 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