교집합과 합집합만 구하면 쉬운 문제였는데, 합집합의 개수를 세는 과정에서 애를 먹었던 문제였다.
문제 예시에 나와있는 부분들을 자세하게 안 읽었던 패착이 있었다...나는 합집합 개수만 세면 되는줄 알았지..
집합연산은 Set, Counter를 통해 연산을 할 수 있는데
우선 Counter의 사용부터 보면 list에서 등장한 단어의 개수를 세는 용도로 많이 쓰인다.
from collections import Counter
arr1 = ['HA', 'AN', 'ND', 'DS', 'SH', 'HA', 'AK', 'KE']
print(Counter(arr1))
# Counter({'HA': 2, 'AN': 1, 'ND': 1, 'DS': 1, 'SH': 1, 'AK': 1, 'KE': 1})
가장 헷갈렸던 부분은 elements()의 사용인데,
arr1 = ['HA', 'AN', 'ND', 'DS', 'SH', 'HA', 'AK', 'KE']
arr2 = ['SH', 'HA', 'AK', 'KE', 'HA', 'AN', 'ND', 'DS']
intersection_e = list((Counter(arr1)&Counter(arr2)).elements())
print(intersection_e)
# ['HA', 'HA', 'AN', 'ND', 'DS', 'SH', 'AK', 'KE']
intersection = list((Counter(arr1)&Counter(arr2)))
print(intersection)
#['HA', 'AN', 'ND', 'DS', 'SH', 'AK', 'KE']
intersection 과 intersection_e의 차이를 보면 중복된 원소를 갖고있냐의 차이를 볼 수 있다.
elements() 메서드를 사용하면 카운터 된 숫자 만큼의 요소를 리턴 받을 수 있다.
cnt = Counter(a=5,b=3)
#Counter({'a':5, 'b':3})
list(cnt.elements())
#['a','a','a','a','a','b','b','b']
list(cnt)
#['a','b']
LRU 알고리즘만 파악하고 있으면 쉽게 풀 수 있었던 문제 였다.
근데 문제에는 알고리즘 예시도 명시 안해줬다 검색해서 풀라는 건지..
'21년도 부터는 코테 중에 검색이 안되던데~이런 문제는 이제 안나오겠지...:(