집합에서,
{{1,2,3},{2,1},{1,2,4,3},{2}}
원소 개수가 작은 집합의 원소부터, 원소들을 튜플에 차례대로 담아 return하는 것이다.
튜플은 다음과 같은 성질을 가지고 있습니다.
- 중복된 원소가 있을 수 있습니다. ex : (2, 3, 1, 2)
- 원소에 정해진 순서가 있으며, 원소의 순서가 다르면 서로 다른 튜플입니다. ex : (1, 2, 3) ≠ (1, 3, 2)
- 튜플의 원소 개수는 유한합니다.
원소 개수가 작은 순서대로 집합들을 정렬한다면
{{2},{2,1},{1,2,3},{1,2,4,3}}
가 된다.
하지만 문제에서는 중복되지 않은 튜플을 제공하므로
이 집합으로 튜플을 만든다면
(2, 1, 3, 4)
가 된다. (차례로 더해진 원소 순서대로)
def solution(s):
data = [[] for _ in range(len(s))] # 숫자를 넣을 리스트 초기화
s = s[1:len(s)-1] # 어차피 집합의 모임이므로, 제일 바깥 괄호 제거
num = '' # 임시 숫자를 담을 변수
answer = [] # 정답을 담을 변수
for i in range(len(s)):
if s[i] == '{': # {이면 임시 숫자 시작
now = i
flag = True
elif s[i].isdecimal(): # 숫자이면
num += s[i] # 임시 숫자에 저장
elif s[i] == ',': # ,가 나오면 같은 리스트 내 다른 숫자인지, 다른 집합인지 구별
if flag == True: # 같은 리스트 내 다른 숫자이면
data[now].append(num) # now와 같은 리스트에 더하기
num = '' # 임시 숫자 초기화
elif s[i] == '}': # 임시 숫자 입력 끝
data[now].append(num)
num = ''
flag = False
data.sort(key=len) # 원소 수대로 정렬
for i in range(len(data)): # 빈 리스트 제거
if len(data[i]) > 0:
data = data[i:] # 빈 리스트들 삭제
break
for i in data:
for num in i:
if int(num) not in answer: # 원소 길이가 1인 리스트부터 하나씩 더해져가며 집합이 생기므로, 중복 제거하여 튜플 만들기
answer.append(int(num))
return answer
def solution(s):
s = Counter(re.findall('\d+', s))
return list(map(int, [k for k, v in sorted(s.items(), key=lambda x: x[1], reverse=True)]))
import re
from collections import Counter
위 코드는 해당 숫자가 나온 회수를 많은 순서대로 정렬하여 리스트로 만들어 return 하였다.
멋찌다..