nums1과 nums2라는 두 개의 숫자 목록이 있다고 가정합니다. 반드시 고유하지 않은 몇 가지 요소가 있습니다. 그러나 이 두 목록은 실제로 동일한 숫자 집합의 서로 다른 순열을 나타냅니다. 그러나 그들 중 일부는 누락되었습니다. 이 두 목록에서 누락된 숫자를 찾아 모두 인쇄해야 합니다.
따라서 입력이 nums1 =[4,5,8,8,6,9] nums2 =[3,4,4,8,8,8,6,9,5,8]과 같으면 출력은 다음과 같습니다. nums1에는 3이 없지만 nums2에는 있으므로 [3,4,8,8]이 됩니다. 4는 둘 다에 있지만 nums2에는 두 개의 4가 있지만 nums1에는 하나만 있으므로 하나의 4가 없습니다. 마찬가지로 nums2에는 4개의 8이 있지만 nums1에는 2개만 있으므로 2개가 누락되었습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- c1 :=nums1에 있는 각 요소의 빈도를 포함하는 목록
- c2 :=nums2에 있는 각 요소의 빈도를 포함하는 목록
- all_nums :=nums1 및 nums2의 모든 고유 숫자를 포함하는 집합
- res :=새 목록
- all_nums의 각 n에 대해 다음을 수행합니다.
- n이 c1에 없으면
- res에 n, c2[n]번 삽입
- 그렇지 않으면 n이 c2에 없으면
- res에 n, c1[n]번 삽입
- 그렇지 않으면
- c1[n]이 c2[n]과 같지 않으면
- n 삽입, |c1[n]- c2[n]| 시간을 res로
- c1[n]이 c2[n]과 같지 않으면
- n이 c1에 없으면
- 반환 결과
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
from collections import Counter def solve(nums1, nums2): c1 = Counter(nums1) c2 = Counter(nums2) all_nums = set(nums1) | set(nums2) res = [] for n in all_nums: if n not in c1: res = res + [n]*c2[n] elif n not in c2: res = res + [n]*c1[n] else: if c1[n] != c2[n]: res = res + [n]*abs(c1[n]- c2[n]) return res nums1 = [4,5,8,8,6,9] nums2 = [3,4,4,8,8,8,6,9,5,8] print(solve(nums1, nums2))
입력
[4,5,8,8,6,9], [3,4,4,8,8,8,6,9,5,8]
출력
[3, 4, 8, 8]