A[i], B[j]가 같은 경우에 대해 (i,j) 를 Beautiful pair라고 하며 이 beautiful pairs의 집합을 beautiful set이라고 함
beautiful set 내에 i 혹은 j끼리 중복이 없다면 pairwise disjoint라고 부름
B 배열의 원소 1개를 바꾸어 pairwise disjoint beautiful set의 크기를 최대로 만들어야 함
이때 B의 원소를 바꾸는 것은 옵션이 아닌 필수!
pairwise disjoint beautiful pairs를 정답으로 return
풀이
def beautifulPairs(A, B):
# Write your code here
answer = 0
aobo = [] # 교집합 찾기
for a in A:
if a in B:
aobo.append(a)
B.remove(a)
answer = len(aobo)
return answer+1 if B else answer-1 # 매칭되지 않은 B의 값이 남아있을 경우 +1, 없으면 -1
처음에는 A, B의 벤다이어그램을 생각해서 A B 의 교집합과 차집합을 각각 구했었는데 차집합은 어차피 A, B의 길이가 같기 때문에 필요가 없어서 교집합인 aobo 변수만 남겼다.
주의해야 할 예외는 바로 배열 A, B 가 완전히 같은 경우이다. B의 값 중 한 개는 무조건 바꿔줘야 하기 때문에 A, B 가 완전히 같은 집합일 경우 정답은 배열의 길이가 아닌 길이-1이다.