# 코드 1
# 정규식을 사용해서 {} 사이의 문자를 찾은 다음
# 해당 길이가 짧은 것을 기준으로 정렬을 오름차순 정렬
# 이후 배열의 요소들을 정수화 시킨 다음 차집합을 이용하기 위해 set화 시킨 다음
# 차집합으로 이전 요소와 비교 후 달라진 값만 배열에 추가 후 리턴 시킴.
import re
def solution(s):
answer = []
li = re.findall(r'\{.*?\}', s[1:-1])
li.sort(key=len)
li = [set(map(int,i.strip('{}').split(','))) for i in li]
if len(li) == 1: answer = list(li[0])
else:
for i in range(len(li)-1):
if i == 0: answer.append(list(li[i])[0])
answer.append(list(li[i+1].difference(li[i]))[0])
return answer
# 코드 2 (다른 사람 코드 참고)
# 정규식과 Counter를 이용해서 같은 요소가 몇번이나 있는지 조사하는 코드
# 여기서 중요한건 re.findall('\d+', s))을 할 때 '\d'와 '\d+'의 차이점으로
# '\d'의 경우 값 하나하나로 인식해
# 예를 들어 {20,111},{111} 의 경우 1: 6, 2: 1, 0: 1 이런식으로 나오기에
# '\d+'를 사용해서 111: 2, 20: 1 이런식으로 해야 이번 문제에서 의도한 대로 풀 수 있다.
from collections import Counter
import re
def solution(s):
s = Counter(re.findall('\d+', s))
return [int(k) for k,v in sorted(s.items(), key=lambda x:x[1], reverse=True)]