새소식

Study/문제풀이

[hackerrank] Beautiful pairs (Python)

  • -
728x90

문제 (링크)

  • N개의 정수를 가진 같은 길이의 배열 A, B 가 주어짐
  • 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이다. 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.