문제를 이해하고 나선 아주 금방 풀었다.
from collections import Counter
def solution(s):
st_data = list(s.split("},"))
data = Counter()
for i in range(len(st_data)):
st_data[i] = st_data[i].replace("{", "").replace("}", "")
st_data[i] = tuple(st_data[i].split(','))
for c in st_data:
data += Counter(c) #Counter도 덧셈이 가능하다!
final = data.most_common()
return [int(x[0]) for x in final]
먼저 문자열을 파싱하는 과정인데, 처음에 "},"을 기준으로 문자열을 분리해주면 중괄호는 몇개 남지만 튜플 데이터를 기준으로 끊을 수 있다.
이후 중괄호를 replace를 통해 모두 제거해준다음, 튜플별로 ","을 기준으로 숫자를 끊어주면 튜플을 표현하는 집합을 만들 수 있다.
그 후 Counter를 사용하여 원소들의 개수를 센 다음, 가장 많이 쓰인 원소가 result의 앞에 와야 하므로 most_common함수를 통해 많이 쓰인 값 기준으로 정렬해준다.
s가 {{4,2,3},{3},{2,3,4,1},{2,3}}, 일 경우, Counter(s).most_common 함수는 [('3', 4), ('2', 3), ('4', 2), ('1', 1)] 과 같은 list를 반환한다. 이때 key값은 문자열임에 유의한다.
그 후 list comprehension으로 키값만 int로 변환하여 리스트에 넣는다!