Problem :

https://www.hackerrank.com/challenges/beautiful-pairs/problem


My Solution :

#!/usr/bin/env python3


def beautiful_pairs(A, B):
A = sorted(A)
B = sorted(B)
count = i = j = 0
while i < n and j < n:
if A[i] == B[j]:
count += 1
i += 1
j += 1
elif A[i] < B[j]:
i += 1
else:
j += 1
if count == n:
return count-1
return count+1


n = int(input())
A = list(map(int, input().rstrip().split()))
B = list(map(int, input().rstrip().split()))
result = beautiful_pairs(A, B)
print(result)


Comment :

정말 별거 아닌 문제라고 생각했는데 몇 시간을 허비했다. 내가 실수했던 부분은 2가지이다.


첫째 - 문제 해석을 제대로 하지 못했다.

pairwise disjoint의 정의를 내멋대로 곡해해서 set(A) & set(B) 카운트만 세었다. 그랬더니 정답보다 숫자가 많이 모자라게 되었다. 즉 이 문제에서는 i,j index가 둘다 중복되지 않으면 카운트 해야 하는데, 난 index랑 상관없이 값이 중복되면 1개만 카운트를 했던 것이다.


둘째 - B에서 원소 제거를 간과

마찬가지로 문제 해석을 제대로 못했다고 볼 수 있다. 난 B에서 잉여를 A의 잉여로 바꿔서 count + 1 할 생각만 했지, B에 잉여가 없을 때도 B에서 1개를 제거해야 한다는 부분을 생각하지 못했다. count - 1 해야하는 Testcase가 2개 있어서 그것 때문에 계속 시간을 끌었다.


결론 : 문제를 잘 읽자. 정말 잘 풀었는데도 Testcase를 통과하지 못하면, 물론 문제나 Testcase에 오류가 있는 경우도 간혹 있지만, 대부분은 문제를 잘 읽지 않아서 놓친 조건 때문인 경우가 많다.