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

파이썬에서 n개의 아이템을 팔고 남은 아이템의 수를 찾는 프로그램

<시간/>

항목이라는 숫자 목록과 다른 값 n이 있다고 가정합니다. 판매원은 임의의 ID가 있는 가방에 항목을 가지고 있습니다. 판매원은 가방에서 최대 n개의 항목을 삭제할 수 있습니다. n번 제거한 후 가방에서 최소 개수의 다른 ID를 찾아야 합니다.

따라서 입력이 항목 =[2, 2, 6, 6] n =2와 같으면 ID 2 또는 ID 6을 가진 두 개의 항목을 판매할 수 있으므로 출력은 1이 됩니다. 그러면 단일 대상이 있는 항목만 거기.

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

  • c :=항목에 있는 각 요소의 빈도
  • ans :=c의 크기
  • freq :=c의 모든 주파수 목록 정렬
  • i :=0
  • 내가 <주파수의 크기인 동안
    • 주파수[i] <=n이면
      • n :=n - 주파수[i]
      • ans :=ans - 1
    • 그렇지 않으면
      • 반환
    • 나는 :=나는 + 1
  • 0을 반환

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시

from collections import Counter

class Solution:
   def solve(self, items, n):
      c = Counter(items)
      ans = len(c)
      freq = sorted(c.values())
      i = 0
      while i < len(freq):
         if freq[i] <= n:
            n -= freq[i]
            ans -= 1
         else:
            return ans
         i += 1
      return 0

ob = Solution()
items = [2, 2, 6, 6]
n = 2
print(ob.solve(items, n))

입력

[2, 2, 6, 6], 2

출력

1